向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;
}
}

Spring之Bean注入Spring容器中的方式的更多相关文章

  1. Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解

    1.背景:     工作中是否有这样的场景?一个软件系统会同时有多个不同版本部署,比如我现在做的IM系统,同时又作为公司的技术输出给其他银行,不同的银行有自己的业务实现(比如登陆验证.用户信息查询等) ...

  2. 在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化

    在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化. 如果我们想保证实例的单一性,就要在定义<bean>时加上factory-method=” ...

  3. SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean

    SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean 在SpringBoot中开发AspectJ时,使用CTW的方式来织入代码,由于采用这种形式,切面Bean ...

  4. spring的bean注入扫瞄方法和mybatis的dao bean注入扫描方法

    spring的bean注入扫面方法:@ComponentScan(basePackages = "com.pingan.property.icore.pap.*")mybatis的 ...

  5. 7 -- Spring的基本用法 -- 9...容器中Bean的生命周期

    7.9 容器中Bean的生命周期 Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建,何时被初始化完成.容器何时准备销毁该Bean实例. ...

  6. [spring]Bean注入——在XML中配置

    Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...

  7. spring框架bean注入

    今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...

  8. Spring核心原理之 IoC容器中那些鲜为人知的细节(3)

    本文节选自<Spring 5核心原理> Spring IoC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化.使用FactoryBean产生或者修饰Bean对象的生成. ...

  9. Spring将Bean导入IOC容器

    @Import 注解可以普通类导入到 IoC容器中. 想要让一个普通类接受 Spring 容器管理,有以下方法 使用 @Bean 注解 使用 @Controller @Service @Reposit ...

  10. Spring(四)Bean注入方试

    一.构造方法注入 定义:通过构造函数来完成依赖关系的设定 优缺点: 在构造对象的同时,完成依赖关系的建立 如果关联的对象很多,那和不得不在构造方法上加入过多的参数 基中有index:如果指定索引从0开 ...

随机推荐

  1. 关于windows-server-下MySQL Community版本的的安装与配置

    在公司电脑或者服务器上安装软件,都是有要求的,要么购买license-(这个需要申请,难度较大),要么安装免费开源的软件 笔者最近想要安装mysql服务环境,用于数据存储及开发一些功能程序需要连接数据 ...

  2. 洛谷P6033 [NOIP2004 提高组] 合并果子 加强版 (单调队列)

    数据加强了,原来nlogn的复杂度就不行了...... 首先对原来的n个数排序(注意不能用快排),因为值域是1e5,所以可以开桶排序,开两个队列,一个存原来的n个数(已经满足单增),另一队列存两两合并 ...

  3. 2. 单主机 Elasticsearch 双节点或多节点集群环境部署

    我已经买了一年的腾讯云轻量级服务器,并且安装好了ES,也做了一些系统配置,比如 修改vm.max_map_count.修改文件描述符数量 同时,也用ES安装目录下的 bin/elasticsearch ...

  4. ExcelHelper ->NPOI插件

    调用: var ms = ExcelHelper.PrintInvoiceToExcel("观看时长", headline, items, (row, item) => { ...

  5. 一键生成通用高亮代码块到剪贴板,快捷粘贴兼容 TT/WX/BJ 编辑器

    有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块. 花了一点时间研究了一下各家的编辑器,规则却各不相同.有的要求代码块被包含于 <code> ... &l ...

  6. 华为路由器DHCP配置基本命令

    配置基于接口地址池DHCP (动态主机配置协议) [R1]dhcp enable 路由器上开启DHCP [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]dhcp sel ...

  7. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project StuMavenDemo1: There are test failures.

    Maven使用Test的时候出现 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test ( ...

  8. 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)

    海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器) 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为 st7789,分辨率 240x240,图 ...

  9. Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令

    Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...

  10. 11.mixins混合类

      一.混合类(mixins) 使用基于类的视图,最大的优势之一就创建可复用的代码 我们编写的非常类似的代码,可以抽象出来,将这部分代码放到mixin类系列中,然后作为父类提供子类继承使用 from ...