资源描述
Spring IOC
基于XML方式配置bean
1.配置javaBean
1.1基本配置:
一个<bean> 通常需要定义id和class属性,class属性肯定是必须的,如果配置文件中配置的其他的bean中引用了该bean,则id属性是必须的。Bean则通过id属性相互访问,例如:
<bean id=”exampleBean” class=”examples.ExampleBean”></bean>
上述代码等同于Java代码:
ExampleBean exampleBean = new ExampleBean();
其中,对象名exampleBean相当于配置中的id属性.
<bean id=”…” class=”…”>
<property name=”…” vaue=”…”/><!—定义Property属性-->
<property name=”…”ref=”…”/>
</bean>
<peoperty/>表示将使用name属性对应的setter方法设置该属性
1.2 工厂模式factory-method
如果一个bean不能通过new直接实例化,而是通过工厂类的某个方法创建的,需要把<bean>的class属性配置为工厂类(或者把factory-bean属性配置为工厂类对象),
Factory-method属性配置为生产实例的方法:
<!—等同于exampleBean=examples.MyFactoryBean.createInstance();-->
<bean id=”exampleBean” class=”examples.MyFactoryBean” factory-method=”createInstance”/>
1.3构造函数<constructor=arg>
如果javabean的构造函数带有参数,需要指定构造函数的参数。<constructor-arg/>指定构造函数的参数所用的bean或者值。多个参数时,用多个<constructor-arg/>配置即可。例如:
<bean id=”exampleBean” class=”exampeles.ExampleBean”>
<constructor-arg><ref bean=”anotherexampleBean”/></constructor-arg>
<constructor-arg ref =”anotherexampleBean”/>
<constructor-arg value=”1”/>
</bean>
每个<constructor-arg>配置一个参数,参数有先后顺序,顺序要与构造函数相同。
基于注解方式配置bean
属性自动装配autowire
可以通过<bean>的autowire属性设置自己的装配规则。使用autowire后,不需要再用<property name=”” value=””/>显示的设置该bean的属性,依赖关系。Spring会根据反射,自己寻找符合条件的属性,设置到该bean属性上。如果autowire设置为byType,将会按照属性的类型自动匹配,例如:
<bean id=”d” class=”example.D” autowire=”byType”/>
@Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
@注解配置:
使用 JSR-250 的注释
Spring 不但支持自己定义的 @Autowired 的注释,还支持几个由 JSR-250 规范定义的注释,它们分别是 @Resource、@PostConstruct 以及 @PreDestroy。
@Resouce的作用相当于@Autowired,只不过@Autowire默认按byType自动注入,而@Resource默认按ByName自动注入。
@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。
使用注解方式,在.xml文件里加一句<context:annotation-config/>。
开启注解
使用 @Component
从 XML 配置文件中完全移除 Bean 定义的配置,@Component 注释就可以达到这个目标了。
在使用 @Component 注释后,Spring 容器必须启用类扫描机制以启用注释驱动 Bean 定义和注释驱动 Bean 自动注入的策略。
<context:component-scan/> 的 base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
AOP
AOP的一些重要概念:
包括切面(Aspact)、连接点(Joinpoint)、通知(Advice)、切入点(Pointcut)、引用(Introduction)等。
Aspect(切面):pointcut和advice结合起来就是aspact,它类似于OOP中定义的一个类,单是他代表的更多是对象间横向的关系。
Joinpoint(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。他是一个抽象的概念。在实现AOP时,并不需要去定义一个joinpoint。
Advice(通知):是pointcut的执行代码,是执行“方面”的具体逻辑。
Introduce(引入):为对象引入附加的方法或者属性,从而达到修改对象结构的目的。有的AOP工具又称为mixin
展开阅读全文