`
TRAMP_ZZY
  • 浏览: 133595 次
社区版块
存档分类
最新评论

Spring 3.X 学习笔记(一)

阅读更多
1. Bean 的命名
	可以用id name 来标识一个 Bean。如果定义一个Bean的时候既没有给定 id 也没有给定 name。
	那么默认的采用 类的全限定名字作为 bean 在内存中的名称。
2. 依赖注入
	(1)属性注入。要求Bean 提供一个默认的构造函数,并为需要的属性提供对应的Setter 方法。
	(2)构造函数注入。构造函数注入是除属性注入之外的另一种常用的注入方式。它保证一些必要的属性在Bean 
	实例化时就得到设置,它保证了Bean 实例在实例化后就可以使用。Java 的反射机制并不会记住构造函数的入参名,
	因此我们无法通过指定构造函数的入参名进行构造函数注入的配置,而只能通过入参类型和索引信息间接确定构造函数
	配置项和入参的对应关系。
		有时候需要联合使用类型和索引 来确定具体的使用那个构造函数。
		
		通过自身类型反射匹配入参
		如果Bean 构造函数入参的类型是可辨别的(非基础数据类型且入参类型各异),由于Java 反射机制可以获取构造函
		数入参的类型,即使构造函数注入的配置不提供类型和索引的信息,Spring 依旧可以正确地完成构造函数的注入工作。
		
		构造函数的循环依赖注入
		需要将构造函数注入方式调整为属性注入方式。
		
	(3)工厂方法注入
		非静态工厂方法和静态工厂方法
		
3. Java 属性变量命名的规则。一般情况下要求属性变量名都以小写字母开头,但是考虑到一些特定意义的大写英文缩略词
(USA XML)JavaBean 的命名规范允许大写字母起头的属性变量名,不过必须满足“变量的前两个字母要么去不大写
要么全部小写”。

4. 注入参数详解
	在Spring 配置文件中,用户不但可以将String、int 等字面值注入到Bean 中,还可以将集合、Map等类型的数据注入到Bean
	中,此外还可以注入配置文件中其他定义的Bean。
	![CDATA[]] 为XML的特殊处理标签。让XML 解析器将标签中的字符串当作普通的文本对待。XML 中的五个特殊字符:&<>"'。
	对特殊字符的处理:(1)![CDATA[]](2)使用 XML的转义序列表示这些特殊的字符。
	
	注意:一般情况下,XML 解析器会忽略元素标签内部字符串的前后空格,但是Spring 却不忽略元素标签内部字符串的前后空格。

5. 引用其他Bean。
	  <!-- 引用其他 Bean -->
	  <bean id="boss" class="com.babaotao.beanfactory.Boss">
	  	<property name="car">
	  		<ref bean="car1"/>
	  	</property>
	  </bean>
	bean:通过该属性可以引用同一容器或父容器的 Bean。
	local:通过该属性只能引用同一配置文件中定义的 Bean。它可以利用XML 解析器自动检验引用的合法性,以便在开发编写配置
	时能够及时发现并纠正配置的错误。
	parent:引用父容器中 Bean 。
	null 值:为属性设置一个null 值的注入值
	<property name="brand"><null /></property>
	
6. 集合类型的属性

7. 使用p 命名空间。
	为了简化XML 的配置,越来越多的XML 文件采用属性而非子元素配置信息。

8. 自动装配
	<beans> 元素标签中的 default-autowire 属性可以配置全局自动匹配,default-autowire 属性的默认值为 no,表示不启用
	自动装配,其他几个可选的配置分别为:byName,byType,constroutor,autodetect。不过在<beans> 中定义的自动装配策略
	可以被 <bean> 自动装配策略覆盖。
	
9. <bean> 之间的关系。

10. 整合多个配置文件。
	<import resource="classpath:com/baobaotao/beanfactory/beans.xml" />
	
11. Bean 的作用域。
	Bean 的作用域将对Bean 的生命周期和创建方式产生影响。singleton, prototype, request, session, globalSession。
	Singleton 作用域是重要的设计模式之一。如果用户不希望在容器启动时提前实例化 singleton 的Bean ,可以通过lazy-init 属性
	进行控制。
	<bean id="test" class="com.baobaotao.scope.Boss" p:car-ref="car" lazy-init="true" />
	lazy-int 的Bean 在某些情况下还是会提前实例化。如果该Bean 被其他需要提前实例化的Bean 引用。
	
	prototype 指定非单实例域的 Bean。在默认情况下,Spring 容器在启动时不实例化 prototype 的 Bean。此外, Spring 容器
	将 prototype 的 Bean 交给调用者后,就不再管理它的生命周期了。
	
	web 应用环境相关的 Bean 的作用域。
	如果用户使用 Spring 的 WebApplicationContext 则还可以使用剩下的三种 Bean 作用域。不过需要做 额外的配置。
	在低版本的 Web 容器中(Servlet 2.3)用户可以使用 HTTP 请求过滤器进行配置:
	<web-app>
		<filter>
			<filter-name>requestContextFilter</filter-name>
			<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
		</filter>
		<filter-mapping>
			<filter-name>requestContextFilter</filter-name>
			<url-pattern>*/</url-pattern>
		</filter-mapping>
	</web-app>
	在高版本的 Web 容器中,可以利用 HTTP 请求监听器进行配置:
	<web-app>
		<listener>
			<listener-class>
				org.springframework.web.context.request.RequestContextListener
			</listener-class>
	</web-app>

12. FactoryBean。

13. 基于注解的配置。
	@Component 等效的注解:
	@Repository 注解 DAO 实现类
	@Service 注解 Service 实现类
	@Controller 注解 Controller 实现类
	
14. 使用注解配置信息启动 Spring 容器。
	<context:component-scan base-package="com.baobaotao.web" />
	扫描类包以应用注解定义的 Bean。
	过滤元素
	<context:include-filter type="regex" expression="" />
	<context:exclude-filter type="aspectj" expresssion="" />

15. 自动装配 Bean。
	Spring 通过 @Autowired 注解实现 Bean 的依赖注入。
	
	当希望 Spring 容器即使找不到@Autowired 注入的类也不要报异常,可以使用 @Autowired(required=false)
	如果容器中有一个以上的匹配的 Bean 时,则可以通过 @Qualifier 注解限定 Bean 的名称。
	@Autowired
	@Qualifier("userDao")
	private UserDao userDao;
	
	对类的方法进行标注
	@Autowired
	public void setLogDao(LogDao logDao) {
		this.logDao = logDao;
	}
	@Autowired
	@Qualifier("userDao")
	public void setUserDao(UserDao userDao) {
		this.uerDao = userDao;
	}

16. Spring允许对方法的入参标注 @Qualifier 指定入 Bean 的名称。
	@Autowired
	public void init(@Qualifier("userDao")UserDao userDao, LogDao logDao) {
		......
	}
	一般情况下,在 Spring 容器中大部分的 Bean 都是单实例的,所以我们一般都无需通过注解的 value 属性为
	Bean 指定名称,也无需使用 @Qualifier 指定 Bean。

17. 对集合类进行标注
	如果对类中的集合类的变量或方法入参进行@Autowired 标注, Spring 会将容器中类型匹配的所有 Bean 都自动注入进来。
	@Autowired 按类型匹配注入 Bean。@Resource 按名称匹配注入 Bean。
	
18. Bean 的作用范围及生命过程方法。
	@Scope("prototype")
	@Component
	public class Car {
	......
	}
	在 <bean> 进行配置的时候,我们可以通过 init-method 和 destory-method 属性指定 Bean 的初始化及容器销毁前执行
	执行的方法。Spring 从 2.5 开始支持注解配置上述方法:@PostConstruct->init-method, @PreDestroy->detory-method。
	
19. 基于 Java 类的配置。

	
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics