Spring注入

Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为。

常用的两种注入方式:

  • setter注入
  • 构造注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<!-- setter注入 -->
<bean id="setterService" class="com.injavawetrust.ioc.injection.service.SetterServiceImpl">
<property name="setterDao" ref="setterDao"></property>
</bean>
<!-- 构造注入 -->
<bean id="constructorService" class="com.injavawetrust.ioc.injection.service.ConstructorServiceImpl">
<constructor-arg name="constructorDao" ref="constructorDao"></constructor-arg>
</bean> <bean id="setterDao" class="com.injavawetrust.ioc.injection.dao.SetterDaoImpl"></bean>
<bean id="constructorDao" class="com.injavawetrust.ioc.injection.dao.ConstructorDaoImpl"></bean> </beans>
import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.injavawetrust.ioc.injection.service.ConstructorService;
import com.injavawetrust.ioc.injection.service.SetterService;
/**
* @author InJavaWeTrust
*/
@RunWith(BlockJUnit4ClassRunner.class)
public class TestInjection extends TestCase { private ClassPathXmlApplicationContext context;
@Before
public void before() {
try {
context = new ClassPathXmlApplicationContext("classpath:spring-injavawetrust.xml");
context.start();
} catch (BeansException e) {
e.printStackTrace();
}
} @After
public void after() {
context.destroy();
} @Test
public void tesSetter() {
SetterService service = (SetterService) context.getBean("setterService");
service.say("setter-injavawetrust");
} @Test
public void testConstructor() {
ConstructorService service = (ConstructorService) context.getBean("constructorService");
service.say("constructor-injavawetrust");
} }
/**
* @author InJavaWeTrust
*/
public interface SetterService {
public void say(String str);
}
import com.injavawetrust.ioc.injection.dao.SetterDao;
/**
* @author InJavaWeTrust
*/
public class SetterServiceImpl implements SetterService { private SetterDao setterDao; public void setSetterDao(SetterDao setterDao) {
this.setterDao = setterDao;
} @Override
public void say(String str) {
System.out.println("接受参数:" + str);
str = "hello " + str;
setterDao.say(str);
}
}
/**
* @author InJavaWeTrust
*/
public interface SetterDao {
public void say(String str);
}
/**
* @author InJavaWeTrust
*/
public class SetterDaoImpl implements SetterDao { @Override
public void say(String str) {
System.out.println("say: " + str);
}
}
/**
* @author InJavaWeTrust
*/
public interface ConstructorService {
public void say(String str);
}
import com.injavawetrust.ioc.injection.dao.ConstructorDao;
/**
* @author InJavaWeTrust
*/
public class ConstructorServiceImpl implements ConstructorService { private ConstructorDao constructorDao; public ConstructorServiceImpl(ConstructorDao constructorDao) {
this.constructorDao = constructorDao;
} @Override
public void say(String str) {
System.out.println("接受参数:" + str);
str = "hello " + str;
constructorDao.say(str);
}
}
/**
* @author InJavaWeTrust
*/
public interface ConstructorDao {
public void say(String str);
}
/**
* @author InJavaWeTrust
*/
public class ConstructorDaoImpl implements ConstructorDao { @Override
public void say(String str) {
System.out.println(str);
}
}

Spring注入的更多相关文章

  1. Spring注入JPA+JPA事务管理

    本例实现的是Spring注入JPA 和 使用JPA事务管理.JPA是sun公司开发的一项新的规范标准.在本质上来说,JPA可以看作是Hibernate的一个子集:然而从功能上来说,Hibernate是 ...

  2. Spring注入中byType和byName的总结

    1.首先,区分清楚什么是byType,什么是byName. <bean id="userServiceImpl" class="cn.com.bochy.servi ...

  3. spring注入参数详解

    spring注入参数详解 在Spring配置文件中, 用户不但可以将String, int等字面值注入到Bean中, 还可以将集合, Map等类型的数据注入到Bean中, 此外还可以注入配置文件中定义 ...

  4. 线程中无法实例化spring注入的服务的解决办法

    问题描述 在Java Web应用中采用多线程处理数据,发现Spring注入的服务一直报NullPointerException.使用注解式的声明@Resource和XML配置的bean声明,都报空指针 ...

  5. FlushMode属性与transaction(spring注入的事务)

    一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...

  6. 项目中Spring注入报错小结

    之前在做单元测试时采用注解方式进行service对象的注入,但运行测试用例时对象要注入的service对象总是空的,检查下spring配置文件,我要配置的bean类xml文件已经包含到spring要加 ...

  7. 在静态方法里调用spring注入的方法

    在静态方法里直接调用非静态方法是不行的. 那如何调用spring注入的方法呢? @Component public class AutoLoginUtil {     @Autowired     p ...

  8. 基于配置文件的Spring注入

    基于配置文件的Spring注入 1.依赖注入的概述 依赖注入指的是通过Spring配置文件的方式创建对象时,直接通过配置的方式将数据注入到该对象的标量类型属性,并从Spring容器中获取指定对象注入到 ...

  9. spring注入 属性注入 构造器注入 set方法注入

    spring注入 属性注入 构造器注入 set方法注入(外部bean注入)

随机推荐

  1. 用一个div模拟textarea的实现

    <textarea> 标签定义一个多行的文本输入控件.但是它不能像div一样随着内容增加而自动增加,一言不合就出现滚动条,有是有为了更好的交互,可能需要使用div来模拟textarea的实 ...

  2. 46. Permutations(medium, backtrack, 重要)

    Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have ...

  3. 分享一个二维码图片识别控制台程序Demo

    怎么用NuGet和配置log4net就不介绍了,直接上代码(QRDecodeDemo.zip). (Visual Studio 2015 下的项目,用的.NET Framework 4.5.2) 吐槽 ...

  4. 预习视频day1

    课前预习 编译型和解释型语言优缺点 python2,pyhon3的宏观(大环境下)区别 python的种类 python编码规则 变量命名规范,常量 注释 1.编译型语言:将源码一次性转化为二进制代码 ...

  5. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

  6. swing JTable 更新数据

    rowData 是将要更新的表格内数据,coloumnName是将要更新的表头数据. table是原本的table对象,更新数据的时候要用 DefaultTableModel 类~ /*更新table ...

  7. 硬盘存储计量单位KB、MB、GB大小换算

    一. 预备知识 1. bit与byte 1. bit(简记为 b) 1 bit = 0 or 1 = one binary 2. byte(简记为 B) 1 byte = 8 bits 1字节,8个二 ...

  8. Rails rspec测试报patch user_path(user) param not found: user的解决

    其实道理很简单,就是在User控制器的update方法中有一个验证: def user_params params.require(:user).permit(:name,:email,:passwo ...

  9. fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory

    fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory ...

  10. JAVA中的常量定义在class中还是interface中比较合理?

    本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 java中使用的常量可以集中定义在一个文件中. 有两种解决方案: 1.在Constants.java中 ...