1 配置文件的方法
我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。
Boss 拥有 Office 和 Car 类型的两个属性:
System.out.println必须实现toString方法 我们在 Spring 容器中将 Office 和 Car 声明为 Bean,并注入到 Boss Bean 中:下面是使用传统 XML 完成这个工作的配置文件 beans.xml: 清单 4. beans.xml 将以上三个类配置成 Bean
当我们运行以下代码时,控制台将正确打出 boss 的信息: 清单 5. 测试类:AnnoIoCTest.java
这说明 Spring 容器已经正确完成了 Bean 创建和装配的工作。
|
2 @Autowired
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
要实现我们要精简程序的目的。需要这样来处理:
* 在applicationContext.xml中加入:
- <!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
* 修改在原来注入spirng容器中的bean的方法。
在域变量上加上标签@Autowired,并且去掉 相应的get 和set方法
清单 6. 使用 @Autowired 注释的 Boss.java
- package com.baobaotao;
- import org.springframework.beans.factory.annotation.Autowired;
- public class Boss {
- @Autowired
- private Car car;
- @Autowired
- private Office office;
- …
- }
* 在applicatonContext.xml中 把原来 引用的<porpery >标签也去掉。
- <?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-2.5.xsd">
- <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
- <bean class="org.springframework.beans.factory.annotation.
- AutowiredAnnotationBeanPostProcessor"/>
- <!-- 移除 boss Bean 的属性注入配置的信息 -->
- <bean id="boss" class="com.baobaotao.Boss"/>
- <bean id="office" class="com.baobaotao.Office">
- <property name="officeNo" value="001"/>
- </bean>
- <bean id="car" class="com.baobaotao.Car" scope="singleton">
- <property name="brand" value=" 红旗 CA72"/>
- <property name="price" value="2000"/>
- </bean>
- </beans>
这样,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。
按照上面的配置,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 {
- private Car car;
- private Office office;
- @Autowired
- public void setCar(Car car) {
- this.car = car;
- }
- @Autowired
- public void setOffice(Office office) {
- this.office = office;
- }
- …
- }
这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。而下面的使用方法则对构造函数进行标注:
- package com.baobaotao;
- public class Boss {
- private Car car;
- private Office office;
- @Autowired
- public Boss(Car car ,Office office){
- this.car = car;
- this.office = office ;
- }
- …
- }
由于 Boss() 构造函数有两个入参,分别是 car 和 office,@Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为 Boss(Car car ,Office office) 的入参来创建 Boss Bean。
转载的,感谢原著
相关推荐
Spring@Autowired注解与自动装配.rar
下面小编就为大家带来一篇基于Spring@Autowired注解与自动装配详谈。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起...
主要介绍了彻底搞明白Spring中的自动装配和Autowired注解的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
package soundsystem; import org.junit.BeforeClass; import org.junit.Test;... //自动装配 @Autowired private SgtPeppers sp; @Test public void instanceSpring(){ sp.play(); } }
@Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired注解可以像@Required注解、构造器一样被用于在bean的设值方法上自动装配bean的属性,一个参数或者带有任意名称或带有多个参数的方法。
16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...
16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....
38. 怎样开启注解装配? 39. @Required 注解 40. @Autowired 注解 41. @Qualifier 注解 42.在 Spring 框架中如何更有效地使用 JDBC? 43. JdbcTemplate 44. Spring 对 DAO 的支持 45. 使用 Spring 通过什么方式...
我们需要将自定义四个注解,然后将Group和User类使用@Component注解,在User类中创建Group类的实例化对象并设置为自动装配,这样就能在User类中调用Group类的方法; 然后我们需要自己实现一个IoC容器类,处理自定义...
请举例解释Autowired注解 请举例说明Qualifier注解 构造方法注入和设值注入有什么区别 Spring框架中有哪些不同类型的事件 FileSystemResource和ClassPathResource有何区别 Spring 框架中都用到了哪些设计模式
3. Spring Bean部分围绕Bean的生命周期、作用域、自动装配等进行了详细阐述。 4. 注解部分列举了常用的Spring注解及其作用,如@Component、@Autowired等。 5. 数据访问部分涉及了Spring对JDBC、Hibernate等数据访问...
Spring下描述依赖关系@Resource, @Autowired和@Inject的区别与联系 Spring中BeanFactory和ApplicationContext的区别 谈谈Spring IOC的理解,原理与实现? bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理...
八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...
Spring学习 介绍 Spring轻松学习demo 1.弹簧IOC容器 1.弹簧注入方式 set方法注入 构造方法注入 ...@Autowired可以注解列表和地图; @Order(1)更改注解顺序,list中有效 @Qualifier(“ beanServi
Spring学习 介绍 解决企业应用开发的复杂性 常用依赖 <groupId>org.springframework <artifactId>spring-webmvc <version>5.2.0.RELEASE <groupId>junit ...@Autowired:自动装配通过类型,名字如果@Aut
1 Spring基本特征 6 2 Spring的组成 6 2.1 Spring的jar包 6 2.2 Spring配置文件 7 2.3 Spring API 8 3 Spring基本功能详解 8 3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 ...
八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:...