spring中的@Autowired的用法和作用
(2013-01-21 10:32:24)
标签:
springautowired |
分类: 技术类 |
@Autowired的用法和作用
这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
<bean id="userDao" class="..."/>
<bean id="userService" class="...">
</bean>
这样你在userService里面要做一个userDao的setter/getter方法。
但如果你用了@Autowired的话,你只需要在UserService的实现类中声明即可。
@Autowired
private IUserDao userdao;
Spring@Autowired注解与自动装配
1
我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。
Boss
拥有 Office
和 Car
类型的两个属性:
清单 3. Boss.java
package
com.baobaotao;
public
class Boss {
}
我们在 Spring
容器中将 Office
和 Car
声明为 Bean,并注入到
Boss Bean
中:下面是使用传统 XML
完成这个工作的配置文件 beans.xml:
清单 4. beans.xml
将以上三个类配置成 Bean
<?xml version="1.0" encoding="UTF-8"
?>
<beans
xmlns="http://www.springframework.org/schema/beans"
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
</beans>
当我们运行以下代码时,控制台将正确打出 boss
的信息:
清单 5.
测试类:AnnoIoCTest.java
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationC
public
class AnnoIoCTest {
}
这说明 Spring
容器已经正确完成了 Bean
创建和装配的工作。
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
要实现我们要精简程序的目的。需要这样来处理:
* 在applicationContext.xml中加入:
<!--
该 BeanPostProcessor
将自动对标注@Autowired
的 Bean
进行注入 -->
Spring
通过一个BeanPostProcessor
对 @Autowired
进行解析,所以要让 @Autowired
起作用必须事先在 Spring
容器中声明 AutowiredAnnotationBeanP
* 修改在原来注入spirng容器中的bean的方法。
清单 6.
使用 @Autowired
注释的 Boss.java
package
com.baobaotao;
import
org.springframework.beans.factory.annotation.Autowired;
public
class Boss {
}
* 在applicatonContext.xml中 把原来 引用的<porpery >标签也去掉。
<?xml version="1.0" encoding="UTF-8"
?>
<beans
xmlns="http://www.springframework.org/schema/beans"
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
</beans>
按照上面的配置,Spring
将直接采用 Java
反射机制对 Boss
中的 car
和 office
这两个私有成员变量进行自动注入。所以对成员变量使用 @Autowired
后,您大可将它们的 setter
方法(setCar()
和 setOffice())从
Boss
中删除。
当然,您也可以通过 @Autowired
对方法或构造函数进行标注,如果构造函数有两个入参,分别是 bean1
和 bean2,@Autowired
将分别寻找和它们类型匹配的 Bean,将它们作为
CountryService (Bean1 bean1
,Bean2 bean2)
的入参来创建CountryService
Bean。来看下面的代码:
package
com.baobaotao;
public
class Boss {
}
这时,@Autowired
将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些
Bean。而下面的使用方法则对构造函数进行标注:
package
com.baobaotao;
public
class Boss {
}
由于 Boss()
构造函数有两个入参,分别是 car
和 office,@Autowired
将分别寻找和它们类型匹配的 Bean,将它们作为
Boss(Car car ,Office
office)
的入参来创建 Boss
Bean。

加载中…