spring笔记6 spring IOC的中级知识

1,spring ioc的整体流程,xml配置

 spring笔记6 spring IOC的中级知识_第1张图片

spring ioc初始化的流程结合上图
步骤编号 完成的工作
1 spring容器读取配置文件,解析称注册表
2 根据注册表,找到相应的bean实现类实例化bean
3 把实例化之后的bean放到spring容器中
4 spring开放准备好的bean供程序使用

 

配置方法:

spring笔记6 spring IOC的中级知识_第2张图片

常见的自定义命名空间:

增加自定义的命名空间很easy,如果所示,独家秘籍····

spring笔记6 spring IOC的中级知识_第3张图片

 

spring的常见的自定义命名空间
简称 说明
beans 配置bean
aop aop的配置
tx 声明式事物
mvc mvc的配置
util 简化某些标准配置
jee java EE的EJB,jndi
jdbc 配置数据库提供的schema
jms jms配置
lang 支持Jruby,Groovy的配置
oxm xml映射的配置
task 任务调度的配置
tool 有用工具定义的配置

 

 

2,依赖注入,注入参数,方法注入

 一般配置bean指定id,name不推荐使用;

依赖注入主要有两种,即属性注入和构造函数注入,工厂方法注入,具体选择视实际情况来;

属性注入:在xml中的bean节点中,通过<property name="xxx" value="xxx"/> 属性设置方法的前两个字符要全部大写或者小写;

构造函数注入:在xml中的bean节点中,通过<constructor-arg index="n" type="XXX" value="XXX"/>,对于构造函数的循环依赖,把其中一个改造成属性注入即可解决;

工厂方法注入:通过属性 factory-bean factory-method指定

 

注入参数:

字面值直接使用<value>来指定,特殊字符&xxx;来解决;比如大于 &lt; 小于 &gt; 连字符 &amp; 单引号 &apos;双引号   &quot;

引用<ref bean="xxx"/> 引用存在于本配置文件或者父配置文件中;

内部引用可直接定义bean

特殊的null值通过<null>来指定

支持级联的属性赋值;

集合类型支持到List,Set,Map,Properties

强类型同map

集合还可通过 merge 属性指定合并,可通过util命名空间来简化集合配置,使用p空间来简化属性配置;

 

自动装配:在bean中指定 autowire 类型可以是 byName,byType,constructor,autodetect,不推荐自动装配

 

方法注入:

lookup,一般用在单例的属性是原型的实例,视情况需要是否引入CGLib依赖

<replace-method  name="方法名" replacer="替换接口实现类"> 可以替换方法,接口是MethodReplacer;

 

 3,bean之间的关系

 

bean之间的关系分三类,分别是继承,依赖,引用

继承通过在父bean中加个 abstract属性,子bean中加一个parent属性;

依赖通过增加属性 depends-on="xxx"

引用通过<idref bean="xxx">

 

4,整合配置文件,bean的作用域,FactoryBean

 

通过在主配置文件中增加<import resource="classpath:XXXX"/> 来整合

 

bean的作用域,如果是web应用,除了singleton和prototype之外还有request,session,globalSession

 

singleton是单例无状态的,spring的dao都可以采用单例的模式,spring放在了容器的缓存池里面;

prototype每次都会实例化一个对象;

要在web环境下使用其它的三种作用域,需要在web.xml中配置一个RequestContextListener;

如果单例的或者原型的实例依赖web作用域的某个实例,在web作用的bean里面增加<aop:scoped-proxy/>

 

如果实例化比较复杂,可以使用FactoryBean来定义实例;

 

5,基于注解的配置

 

四类注解来标识bean

@Component 标识一般的bean

@Repository 标识dao

@Service       标识service

@Controller   标识控制层

 

配置扫描:<context:compnent-scan base-package="xxx" resource-patter="xxx"> 它的过滤方式有多种,annotation,assignable,aspectj,regex,custom;

 

自动注入:

@Autowired 有required属性标识缺失是否报错,Qualifier标识名称;可对属性和方法进行标注;

其它的比如:@Inject @Resource功能一样,但是功能没它强大,可忽略;

 

生命周期的支持:通过@PostConstruct 来定义init-method ,通过@PreDestroy来定义 destroy-method

 

@Scope来定义作用域

@Value来引用其它的bean的属性

@Lazyl来定义是否延迟加载

 

6,基于java类的配置

 这里省略,用的不多;

7,小结

最常用的是采用xml配置第三方的bean工具,本应用开发采用注解来配置;

 

 

你可能感兴趣的:(spring,IOC)