三、Spring-自动装配Bean,Java显式装配Bean,XML显式状态bean

一、创建实例

    自动装配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);
	}

}
    分析:构造器多了两个参数


五、项目下载

没有依赖包或项目的来这里下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值