SpringInAction4笔记——装配

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

重点:常用的上下文环境

AnnotationConfigApplicationContext

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

AnnotationConfigWebApplicationContext

XmlWebConfigApplicationContext

1.常用的注解

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 }

@Autowired

@Qualifier("sgtPeppers" )

private CompactDisc sgtPeppers;

@Component

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

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

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

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

@Primary

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

@Configuration

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes=CDPlayerConfig.class)

xml用构造器注入时,

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 }

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

或者用c语法

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 }

<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" />

注入属性时:

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 }

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

或者用p语法

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 }

<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中引用其他配置

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 }

@Configuration

@Import(CDPlayerConfig.class)

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

public class SoundSystemConfig {

}

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

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

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

java配置:

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 }

@Profile("dev")

xml配置

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 }

<beans profile="dev">

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

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 }

@ActiveProfiles("prod")

也可以在

在web.xml中,配置

<context-param>

<param-name></param-name>

<param-value></param-value>

</context-param>

按条件注入Bean

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 }

1、@Bean

@Conditional(MagicExistsCondition.class)

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

2、public class MagicExistsCondition implements Condition

Bean的作用域

单例 Singleton

原型 Prototype

会话 Session

请求 Request

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

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

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 }

<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

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 }
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 }

时间: 2024-11-10 08:25:48

SpringInAction4笔记——装配的相关文章

Spring实战笔记2---Bean的装配

创建应用对象之间协作关系的行为通常成为装配,该篇的主要内容有两个,一个Spring装配Bean的几种方式以及Spring表达式,其实这两者是分不开的,在Spring中,对象无需自己负责查找或者创建与其关联的其他对象,相反容器负责把需要相互协作的对象一引用赋予各个对象,目前我们先说声明式的装配,注解式的装配等溜到下篇再详细记录,在声明用的xml配置文件中,可以使用表达式来完成一些简单的逻辑处理,和方法调用或者对象引用,在有些特殊的需求当中非它莫属,首先是装配Bean 声明Bean <bean id

Spring笔记(二):Ioc 之注入与装配

一.Spring依赖注入的原理 二.依赖注入的实现 (一)对象的注入 1.简单属性注入 1)源代码 package main.java.com.spring.ioc.base.dao.impl; import main.java.com.spring.ioc.base.dao.PersonDao; /** * * PersonDiDaoImpl * @title * @desc * @author SAM-SHO * @Dec 28, 2014 */ public class PersonDiD

Spring学习笔记--使用注解装配

使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的context命名空间配置中的<context:annotation-config>元素,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.

Spring4.0学习笔记(2) —— 自动装配

Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类型一致的Bean,Spring将无法判定哪个Bean最适合该属性,不能执行自动装配 2)byName 根据名称自动装配,必须将目标Bean名称和属性名设置的完全相同 配置方法: Address.java package com.spring.autowire; public class Address { p

Spring学习笔记 5. 尚硅谷_佟刚_Spring_自动装配

1,回顾以前的做法 一个人有姓名,有住址,有一辆车.其中住址和车也是一个类,这种情况下不用自动装配是十分容易实现的 (1)Person类 package com.zsq; public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { thi

Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件

1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.kejian.spring.bean.autowire.Student" p:name="Tony" autowire="byName"></bean> 1.2 类型 byName 目标bean的id与属性名一置,若不匹配置为null byTy

Spring笔记2——Spring中Bean的装配

1.引言 Spring中,对象无需自己负责查找或创建与其关联的其他对象,而是由容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间的协作关系的行为通常称为装配(Wiring),这也是依赖注入的本质. 2.声明Bean 配置Bean的方式主要有两种:基于XML文件的配置方式和基于Java注解的配置方式.传统的基于XML文件的配置方式在声明Bean时,Spring配置文件的根元素来源于Spring beans命名空间所定义的<beans>元素.除了beans命名空间外,Java自带了多种

Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XML

SpringInAction读书笔记--第2章装配Bean

实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器负责把需要相互协作的对象引用赋予各个对象.创建对象之间协作关系的行为称为装配,这也是依赖注入的本质.Spring为装配bean提供了三种主要的装配机制. 1.自动化装配bean Spring从两个角度来实现自动化装配: 组件扫描:Spring会自动发现应用上下文中所创建的bean 自动装配:Spri