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

最新文章

  1. SpringMVC学习记录4
  2. remote debug in visual studio
  3. MySQL 5.6 &amp; 5.7最优配置模板
  4. C# 参数化SQL语句中的like和in
  5. 不得不说的JavaScript异步加载
  6. mac OS X操作--快捷键
  7. 文件I/O(不带缓冲)之原子操作
  8. Vijos1865 NOI2014 魔法森林 LCT维护生成树
  9. 自学php的几个例子(包含AMP(Apache、MySQL、PHP)环境搭建链接)
  10. Mego(05) - 创建模型
  11. Mybatis 系列2
  12. Learning-Python【27】:异常处理
  13. BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力
  14. 11 - JavaSE之GUI
  15. mondrian4 kylin saiku 整合踩坑记录
  16. 洛谷P1736 创意吃鱼法 dp
  17. Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能
  18. 面向对象的JavaScript --- 多态
  19. 第77天:jQuery事件绑定触发
  20. 【BZOJ】1093: [ZJOI2007]最大半连通子图(tarjan+拓扑序)

热门文章

  1. jq修改多个css样式
  2. 锐捷网关交换机开启dhcp服务
  3. PHP全栈开发(七):PHP与MySQL存储交互(2.插入、读取)
  4. Codeforces Round #442 (Div. 2) B. Nikita and string
  5. 从SpringBoot启动,阅读源码设计
  6. POJ3237 Tree (树链剖分)
  7. EFCore (三)悲观锁 和 乐观锁
  8. 【软件学习】如何将Typora中的本地图片上传到博客
  9. CCS 2022 极客少年挑战赛 writeup
  10. Vue学习之--------全局事件总线(2022/8/22)