Spring Bean自动装配和注解注入
问题描述如果一个Bean需要注入很多属性,每个属性都要显示注入,就会显得很麻烦。解决方案让Ioc容器自动为Bean指定引用。方法之一---在XML配置文件实现自动装配Car.javapackage com.zzj.bean;public class Car {public void start(){System.out.println("starting ca
·
问题描述
如果一个Bean需要注入很多属性,每个属性都要显示注入,就会显得很麻烦。
解决方案
让Ioc容器自动为Bean指定引用。
方法之一---在XML配置文件实现自动装配
Car.java
package com.zzj.bean;
public class Car {
public void start(){
System.out.println("starting car...");
}
}
User.java
package com.zzj.bean;
public class User {
private Car car;
public void setCar(Car car) {
this.car = car;
}
public void startCar(){
car.start();
}
}
配置文件
<?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">
<bean id="car" class="com.zzj.bean.Car"></bean>
<bean id="user" class="com.zzj.bean.User" autowire="byName"></bean>
</beans>
测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
user.startCar();
}
注:要让spring容器自动装配Bean,需要提供一个参考,这个参考就是bean的autowire属性。
自动装配有3中方式:
1.根据名称自动装配(byName)。因为spring 容器中Bean的名称是唯一的,所以不会产生歧义,推荐使用这种方式。
2.根据类型自动装配(byType)。在Spring容器中可能会找到多个跟需要注入的bean的类型相同的Bean,所以会产生歧义,Spring容器不知道注入哪个Bean,这时会抛出异常。
3.根据构造器自动装配(constructor)。这种方式比较复杂,不做分析。
方法之二---使用注解实现自动装配
修改User.java文件和XML配置文件就行了。
User.java
package com.zzj.bean;
import org.springframework.beans.factory.annotation.Autowired;
public class User {
@Autowired
private Car car;
public void startCar(){
car.start();
}
}
注:此时setter方法可以省掉。
XML配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="car" class="com.zzj.bean.Car"></bean>
<bean id="user" class="com.zzj.bean.User"></bean>
<context:annotation-config/>
</beans>
要使用Spring Ioc的注解注入功能,需要引入新的命名空间。
注:@Autowired是spring自带的注解,也可以使用Java原生的注解:@Resource。推荐使用@Resource,更具移植性。
更多推荐
已为社区贡献3条内容
所有评论(0)