Spring之Bean注入Spring容器中的方式
2024-09-03 12:52:25
向spring容器中加入bean有以下方式:
- 通过<Bean>标签
- @Configuration + @Bean
- @Component + 组件扫描
- @Import导入【见 Spring注解之@Import】
- 实现FactoryBean接口
- 通过BeanFactory后置处理器BeanFactoryPostProcessor【见Spring之后置处理器- BeanFactoryPostProcessor】
通过<Bean>标签
在applicationContext.xml中使用<Bean>标签将Bean注入Spring容器。
无参构造
<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
静态工厂方法
使用场景主要有2种:
1)创建Bean的时候需要添加额外的逻辑,可以创建自己的静态工厂方法
<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 + 组件扫描
@Component将类声明成组件,然后在配置文件中配置组件扫描,组件扫描会将@Component配置的类注入Spring容器中。
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" />
实现FactoryBean接口
FactoryBean是一个接口,用来定义工厂Bean的规范【开发很少使用,一般在Spring底层中使用】
FactoryBean的实现类本身不会被注册成Bean,而是将getObject()返回的对象注册成Bean。
@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;
}
}
最新文章
- SpringMVC学习记录4
- remote debug in visual studio
- MySQL 5.6 &; 5.7最优配置模板
- C# 参数化SQL语句中的like和in
- 不得不说的JavaScript异步加载
- mac OS X操作--快捷键
- 文件I/O(不带缓冲)之原子操作
- Vijos1865 NOI2014 魔法森林 LCT维护生成树
- 自学php的几个例子(包含AMP(Apache、MySQL、PHP)环境搭建链接)
- Mego(05) - 创建模型
- Mybatis 系列2
- Learning-Python【27】:异常处理
- BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力
- 11 - JavaSE之GUI
- mondrian4 kylin saiku 整合踩坑记录
- 洛谷P1736 创意吃鱼法 dp
- Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能
- 面向对象的JavaScript --- 多态
- 第77天:jQuery事件绑定触发
- 【BZOJ】1093: [ZJOI2007]最大半连通子图(tarjan+拓扑序)
热门文章
- jq修改多个css样式
- 锐捷网关交换机开启dhcp服务
- PHP全栈开发(七):PHP与MySQL存储交互(2.插入、读取)
- Codeforces Round #442 (Div. 2) B. Nikita and string
- 从SpringBoot启动,阅读源码设计
- POJ3237 Tree (树链剖分)
- EFCore (三)悲观锁 和 乐观锁
- 【软件学习】如何将Typora中的本地图片上传到博客
- CCS 2022 极客少年挑战赛 writeup
- Vue学习之--------全局事件总线(2022/8/22)