Spring速查手册——Bean装配
时间:2022-05-03
本文章向大家介绍Spring速查手册——Bean装配,主要内容包括1. 自动装配Bean(注解)、1.2. 标识组件、1.3. 自动装配、2. 在Java中装配Bean、2.2. 注入、3. 在XML中装配Bean、3.2. 构造器注入、3.3. 属性注入、4. 混合使用JavaConfig中的bean和XML中的bean、4.2. 在JavaConfig中引用XML中的bean、4.3. 在XML中引入另一个XML、4.4. 在XML中引入JavaConfig、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
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 id="xxx" class="com.xxx.xxx" />
3.2. 构造器注入
- 使用constructor-arg
<!-- 注入引用 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg ref="yyy" />
</bean>
<!-- 注入字面值 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg value="我是字面值" />
</bean>
<!-- 注入集合 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg>
<list>
<value>啦啦啦1</value>
<value>啦啦啦2</value>
<value>啦啦啦3</value>
</list>
</constructor-arg>
</bean>
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg>
<list>
<ref bean="xxx1" />
<ref bean="xxx2" />
<ref bean="xxx3" />
</list>
</constructor-arg>
</bean>
- 使用c-命名空间 首先需要在beans标签中加入xmlns:c命名空间。
<!-- 注入引用(若构造函数有多个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:参数名-ref="yyy"/>
<!-- 注入引用(指定注入到第几个参数中) -->
<bean id="xxx" class="com.xxx.xxx" c:0-ref="yyy"/>
<!-- 注入引用(若构造函数只有一个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:_-ref="yyy"/>
<!-- 注入字面值 -->
<bean id="xxx" class="com.xxx.xxx" c:_参数名="啦啦啦"/>
<bean id="xxx" class="com.xxx.xxx" c:_0="啦啦啦"/>
<!-- 注入字面值(若构造函数只有一个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:_="啦啦啦"/>
PS:c命名空间不支持集合装配!
3.3. 属性注入
- 使用property属性
<bean id="xxx" class="com.xxx.xxx">
<property name="属性名" ref="yyy" />
</bean>
- 使用P命名空间 首先需要在beans标签中引入p命名空间。
<bean id="xxx" class="com.xxx.xxx" 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 class="com.xxx.XXXConfig" />
- JavaScript能做什么?
- SQL中利用DMV进行数据库性能分析
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
- 独家!万达网科大裁员后将转型AI 朱战备或接班曲德君
- Git分支管理的策略梳理
- 数据场景分析 线上线下商家到底谁能干过谁?
- 张钦坤:云计算、开放平台与服务商版权责任
- biztalk 2010 dev版安装小记
- 微信小程序如何获取组件实际高度
- flex4/flash builder中动态加载Module并与之交互的正确方式
- Google发布会看图的人工智能,让它来评评你的照片拍得好不好
- Git日常操作命令梳理
- Git忽略规则.gitignore梳理
- 深入浅出事件流处理NEsper(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android进阶:Binder那么弱怎么面大厂?
- Mybatis源码学习第七天(PageHelper分析)
- 【小程序】728- 小程序如何生成海报分享朋友圈
- Mybatis源码学习第七天(插件源码分析)
- Mybatis源码学习第七天(插件开发原理)
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
- 无法用排他锁锁定该数据库,以执行该操作。 (Microsoft SQL Server,错误: 5030)
- Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)
- php hash算法类
- Spring security OAuth2.0认证授权学习第三天(认证流程)
- uni-app搜索历史记录功能实现
- [903]linux文件删除后磁盘空间没有释放
- Spring如何实现AOP,请不要再说cglib了!
- Redis安装问题解决方案
- 高效的5个pandas函数,你都用过吗?