Spring实战总结

Spring实战总结_第1张图片

1.@Autowired注解

可以用在类的任何方法上,@Inject与其类似.@Inject注解来源于Java依赖注入规范,该规范同时还为我们定义了@Named注解。在自动装配中,Spring同时支 持@Inject和@Autowired。尽管@Inject和@Autowired之间有着一些细微的差别,但是在大多数场景下,它们都是可以互相替换的。

2.装配机制

在XML中进行显式配置,标签,构造器注入初始化bean,;

在Java中进行显式配置,@Bean;

隐式的bean发现机制和自动装配,@ComponentScan,@Component,@Autowired。

混合装配.

3.@Conditional注解作用

假设你希望一个或多个bean只有在应用的类路径下包含特定的库时才创建。或者我们希望某个bean只有当另外某个特定的bean也声明了之后才会创建。我们还可能要求只有某个特定的环境变量设置之后,才会创建某个bean。在Spring 4之前,很难实现这种级别的条件化配置,但是Spring 4引入了一个新的@Conditional注解,它可以用到带有@Bean注解的方法上。如果给定的条件计算结果为true,就会创建这个bean,否则的话,这个bean会被忽略。

4.处理自动装配的歧义性-注入时,有多个同一类型bean,会NoUniqueBeanDefinitionException

@Primary,@Qualifier

5.bean的作用域

单例(Singleton):在整个应用中,只创建bean的一个实例。

原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。

会话(Session):在Web应用中,为每个会话创建一个bean实例。

请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

作用域代理能够延迟注入请求和会话作用域的bean: 一个会话过来,Spring并不会将实际的ean注入到某个Service中,Spring会注入一个到bean的代理。这个代理会暴露与bean相同的方法,所以Service会认为它就是一个购物车。但是,当Service调用bean的方法时,代理会对其进行懒解析并将调用委托给会话作用域内真正的bean。如果代理是接口而不是类的话,这是可以的(也是最为理想的代理模式)。但如果代理是一个具体的类的话,Spring就没有办法创建基于接口的代理了。此时,它必须使用CGLib来生成基于类的代理。所以,如果bean类型是具体类的话,我们必须要 将proxyMode属性设置ScopedProxyMode.TARGET_CLASS,以此来表明要以生成目标类扩展的方式创建代理。

你可能感兴趣的:(Java)