JSON

Spring速查手册——Bean装配

字号+ 作者:H5之家 来源:H5之家 2017-05-12 08:00 我要评论( )

Spring提供三种Bean的装配方式,分别是:1.自动装配Bean2.在Java中装配Bean3.在XML中装配Bean1.自动装配Bean(注解)Spring从两个角度完成Bean的自动化装配:-组

Spring提供三种Bean的装配方式,分别是:
1. 自动装配Bean
2. 在Java中装配Bean
3. 在XML中装配Bean

1. 自动装配Bean(注解)

Spring从两个角度完成Bean的自动化装配:
- 组件扫描:扫描上下文中所有的Bean(由@Component、@Named注解完成)
- 自动装配:将指定的Bean注入到指定的Bean中(由@Autowired、@Injected注解完成)

1.1. 开启组件扫描

Java的配置方式

@Configuration // 把当前类作为配置类 @ComponentScan // 开启组件扫描 public class XXXConfig(){} 默认情况下扫描与当前配置类共同包下的组件; 指定扫描的基础包:
@ComponentScan(“com.njupt.xxx”) @ComponentScan(basePackages=”com.njupt.xxx”) @ComponentScan(basePackages={“com.njupt.xxx”,”com.nju.xxx”}) @ComponentScan(basePackageClasses={“XXXService.class”,”YYYService.class”})

XML的配置方式

<context:component-scan base-package="xxx.xxx.xxx"> 1.2. 标识组件 @Component class xxx{} 默认的Bean ID为第一个字母小写的类名。 指定Bean ID:@Component(“xxx”) 第二种标识方式:@Named,和@Component用法一样,只不过它是Java Dependency Injection规范中提供的。 1.3. 自动装配

自动注入构造器参数

@Autowired public XXX( Y y ){ this.y = y; }

自动注入setter方法参数

@Autowired public void setXXX( X x ){ this.x = x; }

PS:也可使用@Inject注解,和@Named一样,都是Java依赖注入规范的注解,Spring实现了这些注解。

2. 在Java中装配Bean 2.1. 声明Bean @Configuration class XXXConfig{ // 创建一个Bean @Bean public A setA(){ return new A(); } } 方法名:bean的名字
也可以通过@Bean(name=”xxx”)指定bean的名字。 函数体:通过new创建对象 返回值:为该创建的bean对象 2.2. 注入 @Configuration class XXXConfig{ @Bean public A setA(){ return new A(); } // 注入方式一:执行setA函数(low比) @Bean public B setB(){ return new B( setA() ); } // 注入方式二:Spring自动注入(优雅) @Bean public B setB( A a ){ return new B( a ); } } 3. 在XML中装配Bean 3.1. 声明一个bean <bean /> 3.2. 构造器注入

使用constructor-arg

<!-- 注入引用 --> <bean> <constructor-arg ref="yyy" /> </bean> <!-- 注入字面值 --> <bean> <constructor-arg value="我是字面值" /> </bean> <!-- 注入集合 --> <bean> <constructor-arg> <list> <value>啦啦啦1</value> <value>啦啦啦2</value> <value>啦啦啦3</value> </list> </constructor-arg> </bean> <bean> <constructor-arg> <list> <ref bean="xxx1" /> <ref bean="xxx2" /> <ref bean="xxx3" /> </list> </constructor-arg> </bean> list标签、set标签都只是constructor-arg标签的子标签,不能单独存在,若要把list、set单独声明成一个bean,则需使用util命名空间下的util:list、util:set标签。这样list、set、map可以单独存在,并在constructor-arg标签中直接引用。

使用c-命名空间
首先需要在beans标签中加入xmlns:c命名空间。

<!-- 注入引用(若构造函数有多个参数) --> <bean c:参数名-ref="yyy"/> <!-- 注入引用(指定注入到第几个参数中) --> <bean c:0-ref="yyy"/> <!-- 注入引用(若构造函数只有一个参数) --> <bean c:_-ref="yyy"/> <!-- 注入字面值 --> <bean c:_参数名="啦啦啦"/> <bean c:_0="啦啦啦"/> <!-- 注入字面值(若构造函数只有一个参数) --> <bean c:_="啦啦啦"/>

PS:c命名空间不支持集合装配!

3.3. 属性注入

使用property属性

<bean> <property ref="yyy" /> </bean>

使用P命名空间
首先需要在beans标签中引入p命名空间。

<bean p:属性名-ref="yyy" /> 4. 混合使用JavaConfig中的bean和XML中的bean 4.1. 在JavaConfig中引用另一个javaConfig中的bean @Configuration @Import({XXXConfig.class,YYYConfig.class}) class XXXConfig{ @Bean public A setA(){ return new A(); } } 4.2. 在JavaConfig中引用XML中的bean @Configuration @ImportResource("classpath:xxx.xml") class XXXConfig{ @Bean public A setA(){ return new A(); } } 4.3. 在XML中引入另一个XML <beans> <import resource="xxx.xml" /> <bean /> </beans> 4.4. 在XML中引入JavaConfig

直接声明一个bean即可:

<bean />

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SpringMVC中出现 400 Bad Request 错误(用@ResponseBody处理aja

    SpringMVC中出现 400 Bad Request 错误(用@ResponseBody处理aja

    2017-05-08 17:00

  • blog:ssslinppp Spring学习笔记

    blog:ssslinppp Spring学习笔记

    2017-05-07 17:02

  • Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

    Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

    2017-05-05 14:00

  • springmvc学习笔记-返回json的日期格式问题的解决方法

    springmvc学习笔记-返回json的日期格式问题的解决方法

    2017-04-21 10:02

网友点评