Spring之Bean注入Spring容器中的方式
向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 }
有参构造
<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; } }
静态工厂方法
使用场景主要有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; } }
更多内容,请访问:http://www.cnblogs.com/BlueStarWei
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix