要注入的类:
public class Bowl {
public void putRice() {
System.out.println("盛饭...");
}
}
一、构造方法注入
Person类:
public class Person {
private Bowl bowl;
public Person(Bowl bowl) {
this.bowl = bowl;
}
public void eat() {
bowl.putRice();
System.out.println("开始吃饭...");
}
}
Spring配置文件:
<bean id="bowl" class="com.xxx.Bowl" />
<bean id="person" class="com.xxx.Person">
<constructor-arg name="bowl" ref="bowl"></constructor-arg>
</bean>
二、setter注入
Person类:
public class Person {
private Bowl bowl;
public void eat() {
bowl.putRice();
System.out.println("开始吃饭...");
}
public void setBowl(Bowl bowl) {
this.bowl = bowl;
}
}
Spring配置文件:
<bean id="bowl" class="com.xxx.Bowl" />
<bean id="person" class="com.xxx.Person">
<property name="bowl" ref="bowl"></property>
</bean>
三、注解注入
注册:
@Component //注册所有bean
@Controller //注册控制层的bean
@Service //注册服务层的bean
@Repository //注册dao层的bean
注入:
@Autowired 作用于 构造方法、字段、方法,常用于成员变量字段之上。
@Autowired + @Qualifier 注入,指定bean的名称
@Resource JDK 自带注解注入,可以指定bean的名称和类型等
举例:
Bowl类:
@Component //注册所有bean
//@Controller //注册控制层的bean
//@Service //注册服务层的bean
//@Repository //注册dao层的bean
public class Bowl {
public void putRice() {
System.out.println("盛饭...");
}
}
Person类:
@Component //注册所有bean
//@Controller //注册控制层的bean
//@Service //注册服务层的bean
//@Repository //注册dao层的bean
public class Person {
@Autowired
// @Qualifier("bowl")
// @Resource(name="bowl")
private Bowl bowl;
public void eat() {
bowl.putRice();
System.out.println("开始吃饭...");
}
}
补充:
@Autowired 与@Resource的区别
@Autowired按byType自动注入,而@Resource默认按 byName自动注入。
@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。
如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource(name="bowl") private Bowl bowl;
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
如果我们想使用名称装配可以结合@Qualifier注解进行使用
@Autowired
@Qualifier("bowl")
private Bowl bowl;
定义bean:
@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action
@Service
@Service("Bean的名称")
定义业务层Bean
@Repository
@Repository("Bean的名称")
定义DAO层Bean
@Component
定义Bean, 不好归类时使用.
借鉴博客:https://blog.csdn.net/weixin_40423597/article/details/80643990
浙公网安备 33010602011771号