Spring装配bean的三种方式

举报
晴天X风 发表于 2018/03/14 20:28:25 2018/03/14
【摘要】 Spring装配bean的三种方式一个项目中可以混用如下三种装配方式,但推荐尽可能少地写显示的配置文件,也就是说推荐使用文中的第三种方式。显示配置尽可能使用类型安全、功能更强大的基于Java文件的装配方式。基于XML文件的显式装配较老的方式。在项目中添加xml文件。文件中有唯一父元素<beans>。<beans>中可以嵌套<beans>或<bean>元素,定义bean和依赖。在需要装配集合时,只能

Spring装配bean的三种方式

一个项目中可以混用如下三种装配方式,但推荐尽可能少地写显示的配置文件,也就是说推荐使用文中的第三种方式。显示配置尽可能使用类型安全、功能更强大的基于Java文件的装配方式。


基于XML文件的显式装配

较老的方式。

在项目中添加xml文件。文件中有唯一父元素<beans><beans>中可以嵌套<beans><bean>元素,定义bean和依赖。

在需要装配集合时,只能用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"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="helloService" class="com.service.HelloService">
   <property name="addressList">
         <List>
          <value>INDIA</value>
           <value>USA</value>
         </List>
     </property>
 </bean>

</beans>


基于Java文件的显式装配

在SpringBoot中推荐使用的方式。

@Configuration注解的类是配置类,其中可以通过在方法上使用@Bean注解配置bean。

示例:


@Configuration
@ComponentScan(basePackages = "com.package.path")
public class SampleConfig {
 @Bean(name = "aa")
 public AA aa() {
     return new AA();
 }
}


隐式bean发现机制和自动装配

@Component/Service/Controller/Repository注解(这几个注解没本质区别,不同名称表示bean的不同用途,一般用Component)可以生成被注解类的对应bean,用@Autowired可以自动装配bean。默认按类型装配,可以使用@Qualifier注解指定特定bean。

public class Sample {
   @Autowired
   private AA aa;
   
   private BB bb;

   @Autowired
   public void setBb(BB bb) {
       this.bb = bb;
   }
}

此外,要在配置Java类或者XML文件中指明包扫描的路径。


@Configuration
@ComponentScan(basePackages = "com.package.path")
public class SampleConfig {
}

<context:component-scan base-package="com.package.path"/>

除了直接指明包路径(不具备“类型安全”),也可以通过类或接口来指定扫描机制的目标目录。


@Configuration
@ComponentScan(basePackageClasses = {AA.class, BB.class})
public class SampleConfig {
}

如此,IOC容器会扫描AA和BB两个类所在的包。

引用配置文件/类

在JavaConfig中解析XML配置:

通过@Import注解导入其他的JavaConfig,并且支持同时导入多个配置文件;


@Configuration
@Import({AConfig.class, BConfig.class})
public class SampleConfig {
}

通过@ImportResource注解导入XML配置文件;


@Configuration
@Import(AConfig.class)
@ImportResource("classpath: config.xml")
public class SampleConfig {
}

在XML配置文件中应用JavaConfig:

通过<import>标签引入其他的XML配置文件;

通过<bean>标签导入Java配置文件到XML配置文件,例如


<bean class="com.package.path.AConfig" />


参考

Spring实战2:装配bean—依赖注入的本质


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。