Spring相关原理及应用

Spring通过DI(依赖注入)实现IOC(控制反转)

spring的两种注入方式

构造方法注入
setter方法注入
注解注入是通过反射 feild.set ≈ setter

spring的四种注入模型

注入模型:找Bean和设置Bean
- no     		---默认无自动装配,Bean引用必须由ref元素定义。
- byType		---按照该属性类型装配。
- byName		---按照名字装配,Spring寻找与需要自动装配的属性同名的bean。 
- constructor	---推断构造方法,通过构造方法的参数去装配。

@Autowired和@Resource

@Autowired    ---spring提供,并不是自动注入而是手动注入,会现根据type去找,如果找不到会根据name去找。
@Resource     ---jdk提供,先根据name找,后根据type找,name是@comppent名字。

注:此处type和name与xml里byType和byName不同

单例和原型

单例的bean实例是唯一的,取hashcode是同一个
原型的bean实例是多个
@Scope("prototype")

原型

通过注入ApplicationContext方式:

@Autowired
private ApplicationContext applicationContext;
	public void test(){
		//此时每次拿到的bean都是新的
		applicationContext.getBean(xxx.class);
	}
通过@Lookup:

@Component
public abstract class TestService {
	@Lookup
	public abstract Test2Service test();
		
	public void test2(){
		Test2Service test2Service = test();
		test2Service.hashCode()
	}	
}

spring初始化方法

有三种方式
如果配置多个同一机制则只会执行一次
顺序:
		注解方式@PostConstruct
		实现InitializingBean
	    按xml里 init-method = "xxx"		
顺序是spring的生命周期来的,
源码里是先取到一个后置处理器去处理注解,
然后执行init方法去依次调用接口方法和xml方法

容器的生命周期

Lifecycle 
实现 SmartLifecycle
		使用SmartLifecycle要把isAutoStartup()方法改为return ture;
		容器停止时会调用stop(Runnable callback) 
		然后默认会等30秒停止容器,可以用callback.run()立即停止
@DependsOn("xxxService") 可以指定某个Service在此service之前加载
@Lazy(true) 懒加载 会在getBean的时候才会加载,然后放入单例中下次不用再加载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值