首页 > 代码库 > SpringInAction4笔记——装配

SpringInAction4笔记——装配

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { color: #777777 } span.s2 { color: #931a68 }</style>

重点:常用的上下文环境

AnnotationConfigApplicationContext

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext


AnnotationConfigWebApplicationContext

XmlWebConfigApplicationContext

 

1.常用的注解

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { color: #000000 } span.s2 { color: #777777 } span.s3 { color: #931a68 } span.s4 { color: #0326cc }</style>

  @Autowired

  @Qualifier("sgtPeppers" )

  private CompactDisc sgtPeppers;

 

@Component

 

 

 

 

@Autowired是spring的元注解,可以用java的@Inject替代,先安类型找,如果找不到或者有多个,就按照name找,(扫描时默认是把类名第一个字母小写作为name)

可以用@Qualifier来指定name,或者把变量名改成扫描时生产的name

解决自动装配的歧义性,可以通过

@Qualifier 推荐用这个,设置一个代表性的名字

@Primary 

 

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 }</style>

@Configuration

 

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes=CDPlayerConfig.class)

 

 

xml用构造器注入时,

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #4e9192 } span.s1 { color: #009193 } span.s2 { color: #000000 } span.s3 { color: #932192 } span.s4 { color: #3933ff }</style>

<constructor-arg value="The Beatles" />

或者用c语法

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px } span.s1 { color: #009193 } span.s2 { color: #4e9192 } span.s3 { color: #000000 } span.s4 { color: #932192 }</style>

 

<bean id="compactDisc" class="soundsystem.BlankDisc"

 

        c:_0="Sgt. Pepper‘s Lonely Hearts Club Band" 

 

        c:_1="The Beatles" />

 

        

 

  <bean id="cdPlayer" class="soundsystem.CDPlayer"

 

        c:_-ref="compactDisc" />

 

 

注入属性时:

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } span.s1 { color: #009193 } span.s2 { color: #4e9192 } span.s3 { color: #000000 } span.s4 { color: #932192 }</style>

<property name="artist" value="The Beatles" />

或者用p语法

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #932192 } span.s1 { color: #000000 } span.s2 { color: #009193 } span.s3 { color: #4e9192 } span.s4 { color: #932192 } span.s5 { color: #3933ff }</style>

 <bean id="compactDisc"

        class="soundsystem.properties.BlankDisc"

        p:title="Sgt. Pepper‘s Lonely Hearts Club Band"

        p:artist="The Beatles"

        p:tracks-ref="trackList" />

 

<util:list>等来将bean中的复杂的参数移到外面去,保持xml代码的易读性

 

 

xml中引用其他xml文件

 

<import resource="cd-config.xml">

 

可以使用<bean class="xxx.xx">把javaConfig类导入到XML文件中

 

javaConfig中引用其他配置

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px } span.s1 { color: #777777 } span.s2 { color: #931a68 } span.s3 { color: #000000 }</style>

 

@Configuration

 

@Import(CDPlayerConfig.class)

 

@ImportResource("classpath:cd-config.xml")

 

public class SoundSystemConfig {

 

 

 

}

 

 

 

无论怎么引用,只要在root配置中启用组件扫描即可

比如@ComponentScan和<context:component-scan >

 

配置多个可互相替代的bean时,比如DataSource

java配置:

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 } span.s1 { color: #000000 } span.s2 { color: #3933ff }</style>

 

@Profile("dev")

xml配置

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #932192 } span.s1 { color: #009193 } span.s2 { color: #4e9192 } span.s3 { color: #000000 } span.s4 { color: #3933ff }</style>

<beans profile="dev">

 

 

使用时通过@ActiveProfiles来选择用哪个

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 } span.s1 { color: #000000 } span.s2 { color: #3933ff }</style>

 

@ActiveProfiles("prod")

 

 

也可以在

在web.xml中,配置

<context-param>

<param-name></param-name>

<param-value></param-value>

</context-param>

 

按条件注入Bean

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { color: #777777 } span.s2 { color: #931a68 }</style>

 

1、@Bean

@Conditional(MagicExistsCondition.class)

 

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { color: #931a68 }</style>

 

2、public class MagicExistsCondition implements Condition

 

 

Bean的作用域

 单例 Singleton

原型 Prototype

会话 Session

请求 Request

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { color: #777777 } span.s2 { color: #0326cc }</style>

 

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } span.s1 { color: #000000 } span.s2 { color: #009193 } span.s3 { color: #4e9192 } span.s4 { color: #932192 }</style>

 

<bean class="com.myapp.Notepad" scope="prototype" />

 

 

会话 Session和请求 Request需要设置代理proxyMode,

如果是xml配置,bean中加入<aop:scoped-proxy>

 

 

生命周期 

1.实例化

2.为属性赋值

3.BeanNameAware接口

4.BeanFactoryAware接口

5.ApplicationContextAware接口

6.BeanPostProcessor接口

7.InitializingBean接口

8.DisposableBean接口

 

 

 


引入properties文件

 

 

 

<context:property-placeholder location="classpath:system.properties" />

 

 

 

java配置

 

@PropertySource("classpath:/com/soundsystem/app.properties")

 

 

占位符${...}

SpEL表达式#{...},支持类型安全运输符 "?."

访问类作用域的方法和常量,需要依赖T关键字,比如#{T(System).currentTimeMillis()}

 

SpEL表达式还有很多知识点,不再赘述

使用@Value注解来调用${...}和#{...}

@Value("#{systemPrpperties[‘disc.title‘]}") String title

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } span.s1 { color: #009193 } span.s2 { color: #4e9192 } span.s3 { color: #000000 } span.s4 { color: #932192 }</style> <style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff } span.s1 { color: #777777 } span.s2 { color: #000000 }</style>

SpringInAction4笔记——装配