Spring之Bean注入Spring容器中的方式
- 通过<Bean>标签
- @Configuration + @Bean
- @Component + 组件扫描
- @Import导入【见 Spring注解之@Import】
- 实现FactoryBean接口
- 通过BeanFactory后置处理器BeanFactoryPostProcessor【见Spring之后置处理器- BeanFactoryPostProcessor】
<bean id="teacher" class="com.blueStarWei.bean.Person" />

package com.blueStarWei.bean;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
//setter
//getter
}
Person
有参构造
<bean id="student" class="com.blueStarWei.bean.Person">
<constructor-arg name="name" value="Winn" />
<constructor-arg name="age" value="23" />
</bean>

package com.blueStarWei.bean;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person
静态工厂方法
<bean id="person" class="com.blueStarWei.StaticBeanFactory" factory-method="getPerson" />
public class StaticBeanFactory {
public static Person getPerson() {
System.out.println("static person...");
return new Person();
}
}
2)需要注入第三方的静态工厂方法生成的对象
<bean id="jdbc" class="java.sql.DriverManager" factory-method="getConnection" >
<constructor-arg name="url" value="jdbc:mysql://127.0.0.1:3306/db"/>
</bean>
实例工厂方法
与静态工厂方法的区别在于:静态工厂的方法是static的,调用的时候不用创建工厂对象;而实力工厂方法在使用的时候必须先创建工厂对象。
<!--先创建工厂实例-->
<bean id="objectBeanFactory" class="com.blueStarWei.ObjectBeanFactory" />
<!--根据实例工厂中的方法创建Bean-->
<bean id="student" factory-bean="objectBeanFactory" factory-method="getPerson" />
public class ObjectBeanFactory {
public Person getPerson() {
System.out.println("object person...");
return new Person();
}
}
@Configuration + @Bean
@Configuration是用来类声明一个配置类,@Bean用来将一个方法的返回值声明为一个Bean,并将其注入Spring容器中
@Configuration
public class MyConfiguration {
@Bean
public Person person() {
Person person = new Person();
person.setName("BlueStar");
return person;
}
}
@Component + 组件扫描
package com.blueStarWei.bean; import org.springframework.stereotype.Component;
import java.io.Serializable; @Component
public class Person implements Serializable { }
<!--applicaitonContext.xml-->
<context:component-scan base-package="com.blueStarWei" />
@Component
public class MyFactoryBean implements FactoryBean<Person> {
public Person getObject() throws Exception {
return new Person();
} public Class<?> getObjectType() {
return Person.class;
} public boolean isSingleton() {
return true;
}
}
Spring之Bean注入Spring容器中的方式的更多相关文章
- Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解
1.背景: 工作中是否有这样的场景?一个软件系统会同时有多个不同版本部署,比如我现在做的IM系统,同时又作为公司的技术输出给其他银行,不同的银行有自己的业务实现(比如登陆验证.用户信息查询等) ...
- 在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化
在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化. 如果我们想保证实例的单一性,就要在定义<bean>时加上factory-method=” ...
- SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean
SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean 在SpringBoot中开发AspectJ时,使用CTW的方式来织入代码,由于采用这种形式,切面Bean ...
- spring的bean注入扫瞄方法和mybatis的dao bean注入扫描方法
spring的bean注入扫面方法:@ComponentScan(basePackages = "com.pingan.property.icore.pap.*")mybatis的 ...
- 7 -- Spring的基本用法 -- 9...容器中Bean的生命周期
7.9 容器中Bean的生命周期 Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建,何时被初始化完成.容器何时准备销毁该Bean实例. ...
- [spring]Bean注入——在XML中配置
Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...
- spring框架bean注入
今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...
- Spring核心原理之 IoC容器中那些鲜为人知的细节(3)
本文节选自<Spring 5核心原理> Spring IoC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化.使用FactoryBean产生或者修饰Bean对象的生成. ...
- Spring将Bean导入IOC容器
@Import 注解可以普通类导入到 IoC容器中. 想要让一个普通类接受 Spring 容器管理,有以下方法 使用 @Bean 注解 使用 @Controller @Service @Reposit ...
- Spring(四)Bean注入方试
一.构造方法注入 定义:通过构造函数来完成依赖关系的设定 优缺点: 在构造对象的同时,完成依赖关系的建立 如果关联的对象很多,那和不得不在构造方法上加入过多的参数 基中有index:如果指定索引从0开 ...
随机推荐
- 一个 dubbo 和 springboot 的兼容性问题
背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...
- PAT甲级英语单词整理
proper 正确 合适 vertex(vertices)顶点 respectively 个别 分别 indices 指标 索引 shipping 运输 incompatible 不相容 oxidiz ...
- 2. 单主机 Elasticsearch 双节点或多节点集群环境部署
我已经买了一年的腾讯云轻量级服务器,并且安装好了ES,也做了一些系统配置,比如 修改vm.max_map_count.修改文件描述符数量 同时,也用ES安装目录下的 bin/elasticsearch ...
- element-ui select可搜索下拉框无法在IOS或Ipad调起小键盘输入法
参考:https://segmentfault.com/q/1010000021748033 原因:常规select是可以调起小键盘的.但是element-ui的select其实是input.并且这个 ...
- CURL提交--POST/GET-带header信息
function https_request($url, $param, $data = '', $method = 'GET', $headers = '') { $opts = array( CU ...
- logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
文章目录 1.xml文件的编写 2.实现的效果 2.1 日志保存到磁盘 2.2 控制台输出的效果 放置的位置 1.xml文件的编写 logback-spring.xml <?xml versio ...
- 齐博X1-栏目的调用1
本节来说明下系统提供的几个栏目调用的方法 一节我们制作了一个公共导航,本节我们在首页index中演示下栏目的相关调用 至于其他的数据内容,参考第二季的标签调用即可,直接{qb:tag}调用就可以调用出 ...
- idea如何生成jar包
最近在研究RMI反序列化命令执行的漏洞,让我这个java新手吃尽了苦头,能多学习一些是一些吧. 记录一下写好的java文件生成jar包的过程. 环境: Win10,jdk1.7, idea2016.2 ...
- docker容器化业务
1.环境准备: 设备 IP地址 作用 系统版本 mysql-master 192.168.100.213 Nginx-Web服务器 Ubuntu2004 mysql-slave 192.168.100 ...
- Typora图床上传配置:PicGo+Gitee 不完全指南
每次写Markdown都要手动传图,再复制链接到Typora里,这样比较繁琐. 设置好图床,搭配PicGo,写作时直接剪贴图片到Typora,就能实现自动上传,这样就方便很多. Gitee配置: 许多 ...