Sping4通过注解装配bean

22 篇文章 0 订阅

代码的注释中由详细的解释

首先是基础类:

package com.wpw.spring4.test.assemble;

public interface Animal {
	public void play();
}
package com.wpw.spring4.test.assemble;

import org.springframework.stereotype.Component;

/**
 *  
 * @Component 注解表明该类会作为组件类,并告知Spring要为这个类创建bean。
 * 可以设置@Component的value来为其设置ID。如果没有设置,Spring会将类名的第一个字母变为小写作为ID
 * @Component 可以用java依赖注入规范中提供的@Named注解代替
 * 
 * 
 *
 */
@Component
public class Cat implements Animal {

	@Override
	public void play() {
		System.out.println("I am a cat");
		
	}
}
package com.wpw.spring4.test.assemble;

public class SimCard {

	public void sendMsg() {
		System.out.println("I am a SimCard");
	}
}
package com.wpw.spring4.test.assemble;

public class Phone {
	
	private SimCard simCard;
	
	public Phone(SimCard simCard) {
		this.simCard = simCard;
	}
	
	public void call() {
		simCard.sendMsg();
	}
}

javaConfg类

package com.wpw.spring4.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.wpw.spring4.test.assemble.PackageScan;
import com.wpw.spring4.test.assemble.Phone;
/**
 * @Configuration 注解表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节。
 * 
 * @ComponentScan 注解能够在spring中启用组件扫描,如果没有其他配置的话,默认会扫描与配置类相同的包,
 * Spring将会扫描这个包以及这个包下的所有子包,查找带有@Component注解的类。
 * 如果我们想要将配置类放在单独的包中,使其与其他应用代码分开,需要配置@ComponentScan的属性
 * 	1.value:知道包的名称。
 * 	2.basePackages:指定多个包的名称,以逗号分隔。例如:basePackages={"com.aa","com.bb"}
 * 	3.basePackageClasses:指定包中包含的类或者接口。例如:basePackageClasses={A.class, B.class}
 */
import com.wpw.spring4.test.assemble.SimCard;
@Configuration
@ComponentScan(basePackageClasses = {PackageScan.class})//PackageScan为一个空接口,只是为了标记扫描的包
public class AssembleConfig {

	/**
	 * 简单的bean
	 * @Bean 注解会告诉Spring这个方法返回一个对象,该对象要注册为Spring应用上下文中的bean
	 * 默认情况下,bean的ID与方法名是一样的
	 */
	@Bean
	public SimCard simCard() {
		return new SimCard();
	}
	
	/**
	 * simCard方法上添加了@Bean注解,Spring将会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际调用
	 * 默认情况下,spring中的bean都是单例的
	 */
	@Bean
	public Phone phone() {
		return new Phone(simCard());
	}
	
	/**
	 * 当Spring调用phone2方法创建bean的时候,它会自动装配一个SimCard到配置方法中
	 * 通过这种方式引入其他bean是最佳方式
	 */
	@Bean
	public Phone phone2(SimCard simCard) {
		return new Phone(simCard);
	}
	
}

测试类:

package com.wpw.spring4.test.assemble;

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 com.wpw.spring4.config.AssembleConfig;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=AssembleConfig.class)
public class AssembleTest {

	@Autowired
	private Animal cat;
	
	@Autowired
	private SimCard simCard;
	
	@Autowired
	private Phone phone;
	
	@Test
	public void test1() {
		cat.play();
	}
	
	@Test
	public void test2() {
		simCard.sendMsg();
	}
	
	@Test
	public void test3() {
		phone.call();
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值