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开 ...
随机推荐
- proxy解决跨域问题
首先我们在本地开发,域名都是localhost,当我们需要请求后台数据时,就会出现跨域的问题 下面就是在vue.config.js配置文件里: devServer: { proxy: { ...
- bfs与dfs基础
bfs像二叉树的层序遍历 像这个图走bfs就{1, 2, 3, 4, 5, 6, 7, 8}这样走: dfs就{1, 2, 5, 6, 3, 7, 8, 4}. bfs与queue相结合,走到哪就把哪 ...
- P7961 [NOIP2021] 数列 (DP 刷表法)
(n<=30,是个多维的DP) v数组就是用来计算权值的,一共有m+1个.将S看做一个二进制数,按照题目S的定义,相当于在S的每一位可以随便+1(满足限制情况下),一共可以加n次. 我们来建立D ...
- 通过 Github Action 实现定时推送天气预报
偶然间,看到 GitHub Actions 教程:定时发送天气邮件 - 阮一峰的网络日志 这篇文章,没错,这个正好能打发自己的折腾之心,也能通过代码给生活引入一些变化. 还是在这里简单记录一下实现过程 ...
- 【MySQL】Navicat15 安装
# Navicat安装` 提示`:鉴于之间已经出了MySQL的安装教程,在这了我也讲下,那个其实包含了两个知识点,既可以小白初次安装MySQL客户端,也面向想安装5.x和8.x两个版本的. --- @ ...
- 二十九、Helm常用命令
# 创建一个chart范例 helm create HELM-NAME # 检查chart语法 helm lint ./HELM-NAME # 使用默认chart部署到k8s helm install ...
- 京东云开发者|关于“React 和 Vue 该用哪个”我真的栓Q
一.前言:我全都要 面对当今前端界两座大山一样的主流框架,React和Vue,相信很多小伙伴都或多或少都产生过这样疑问,而这样的问题也往往很让人头疼和犹豫不决: 业务场景中是不是团队用什么我就用什么? ...
- C# 获取打开的EXCEL中某列的行数
背景 在通过C#操作EXCEL时 获取行数 int iRowCount = worksheet.get_Range("A65535", oMissing).get_End(MExc ...
- 将自己的组件打包发布到npm
在项目中有些组件在各个项目中都会调用,那么将组件发布到npm ,用到的项目去下载,这样会省去一些不必要的麻烦. 将组件发布到npm 中的步骤 做个记录 1.项目的创建,我这里使用 vue init w ...
- 使用Jupyter记事本记录和制作.NET可视化笔记
前言:对于记录笔记的工具特别多,不过对于程序员来说,记录笔记+程序代码+运行结果演示可以同时存在,无疑会极大增加我们的笔记的可读性和体验感.以前在写python的时候,使用jupyter的体验很好,所 ...