向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. 一个 dubbo 和 springboot 的兼容性问题

    背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...

  2. PAT甲级英语单词整理

    proper 正确 合适 vertex(vertices)顶点 respectively 个别 分别 indices 指标 索引 shipping 运输 incompatible 不相容 oxidiz ...

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

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

  4. element-ui select可搜索下拉框无法在IOS或Ipad调起小键盘输入法

    参考:https://segmentfault.com/q/1010000021748033 原因:常规select是可以调起小键盘的.但是element-ui的select其实是input.并且这个 ...

  5. CURL提交--POST/GET-带header信息

    function https_request($url, $param, $data = '', $method = 'GET', $headers = '') { $opts = array( CU ...

  6. logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息

    文章目录 1.xml文件的编写 2.实现的效果 2.1 日志保存到磁盘 2.2 控制台输出的效果 放置的位置 1.xml文件的编写 logback-spring.xml <?xml versio ...

  7. 齐博X1-栏目的调用1

    本节来说明下系统提供的几个栏目调用的方法 一节我们制作了一个公共导航,本节我们在首页index中演示下栏目的相关调用 至于其他的数据内容,参考第二季的标签调用即可,直接{qb:tag}调用就可以调用出 ...

  8. idea如何生成jar包

    最近在研究RMI反序列化命令执行的漏洞,让我这个java新手吃尽了苦头,能多学习一些是一些吧. 记录一下写好的java文件生成jar包的过程. 环境: Win10,jdk1.7, idea2016.2 ...

  9. docker容器化业务

    1.环境准备: 设备 IP地址 作用 系统版本 mysql-master 192.168.100.213 Nginx-Web服务器 Ubuntu2004 mysql-slave 192.168.100 ...

  10. Typora图床上传配置:PicGo+Gitee 不完全指南

    每次写Markdown都要手动传图,再复制链接到Typora里,这样比较繁琐. 设置好图床,搭配PicGo,写作时直接剪贴图片到Typora,就能实现自动上传,这样就方便很多. Gitee配置: 许多 ...