一、创建实例
自动装配Bean,是指使用组件扫描(@ComponentScan),让Spring自动创建Bean。比较常用。
1、类A-组件类
package two.atuoConfigurationBean;
import org.springframework.stereotype.Component;
@Component
public class A {
public void print() {
System.out.println("组件类A的打印");
}
}
- @Component表示这是一个组件类
2、启用组件扫描
启用组件扫描有两种方式:Java配置和XML配置,二选一
2.1 Java配置:AConfig类
package two.atuoConfigurationBean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("two.atuoConfigurationBean") //Spring4才可用
public class AConfig {
}
- @Configuration表示这是一个配置类
- @Component表示启动组件扫描,并扫描two.atuoConfigurationBean这个包
2.2 XML配置-applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="two.atuoConfigurationBean" />
</beans>
- 标签<context:component-scan>也表示启动扫描
3、测试-test类
package test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import two.atuoConfigurationBean.A;
import two.atuoConfigurationBean.AConfig;
import two.atuoConfigurationBean.IA;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
//@ContextConfiguration(classes=AConfig.class)
public class test {
@Autowired
private A a;
@Test
public void test() {
// TODO Auto-generated method stub
assertNotNull(a);
a.print();
}
void fun1() {
a.print();
}
}
- @RunWith(SpringJUnit4ClassRunner.class):表示测试时自动创建SPring的应用上下文
- @ContextConfiguration("classpath:applicationContext.xml"):表示加载类路径下的XML配置
- @ContextConfiguration(classes=AConfig.class):表示加载Java配置,【注意:XML配置与Java配置二选一】
- @Autowired:表示注入Bean,这里是A的实例
- @Test:测试的方法,需加上相应的jar包
二、知识点
● 要对Bean自动装配,需使用以下两点:
○ 组件扫描:Spring会自动发现应用上下文中所创建的bean
■ 默认不启用
○ 自动装配:Spring自动满足bean之间的依赖
● 注解
○ @Component(["Bean名"]):表示该类为组件类,Spring要为该类创建bean
■ 还可使用Java依赖注入规范@Named("Bean名")
■ 默认名为小写字母的类名
○ @Configuration:表示该类为配置类
○ @ComponentScan( ["包1" ,"包2"] ):启用组件扫描
■ 默认会扫描所在的包和其所有子包
■ 也可以指定类
○ @RunWith(SpringJUnit4ClassRunner.class):该类执行开始时自动创建Spring的应用上下文
○ @ContextConfiguration(classes=类名.class):在哪个类加载配置
○ @Autowired:传入Bean
■ 可用在变量、构造器、getter、setter方法上
三、Java显式装配Bean
Java显式装配Bean,即不用组件扫描,使用在Java配置中手动创建Bean。
1、Java配置:AConfig类
package two.atuoConfigurationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//@ComponentScan("two.atuoConfigurationBean") //Spring4才可用
public class AConfig {
@Bean(name="aBean")
public A aConfig() {
return new A();
}
}
- 与自动装配Bean不同的是,手动创建了Bean。其它的代码与自动装配Bean完全相同,不过记住是Java配置
- @Bean:通知Spring接收返回对象实例作为Bean。
四、XML显示装配Bean
1、 XML显式装配Bean,即不用组件扫描,使用在XML配置中手动创建Bean。
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- <context:component-scan base-package="two.atuoConfigurationBean" /> -->
<!-- 手动创建Bean -->
<bean id="a" class="two.atuoConfigurationBean.A" />
</beans>
- 把组件扫描注释掉了
- <bean>:创建一个Bean
2、扩展
1)创建的bean有自定义构造器,使用自定义变量注入值
例:
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- <context:component-scan base-package="two.atuoConfigurationBean" /> -->
<!-- 手动创建Bean -->
<bean id="a" class="two.atuoConfigurationBean.A">
<constructor-arg value="aaa" />
<constructor-arg value="bbb" />
</bean>
</beans>
分析: <constructor-arg value="">:向构造器的参数注入值
-
- A类-组件类
package two.atuoConfigurationBean;
import org.springframework.stereotype.Component;
@Component
public class A {
private String s1;
private String s2;
public A(String s1,String s2) {
this.s1=s1;
this.s2=s2;
}
public void print() {
System.out.println("组件类A的打印");
System.out.println("字符串1:"+s1);
System.out.println("字符串2:"+s2);
}
}
分析:构造器多了两个参数
五、项目下载