Spring3学习笔记一Spring简介二IOC详解三DI一注入方式六AOP面向切面编程一AOP基础二基于配置Schema的AOP
Spring 是一个开源的轻量级应用开发框架。使用Spring可以简化开发流程,Spring可以帮我们管理对象和依赖关系,提供通用日志记录、性能统计、安全控制、事务处理等。
Ioc容器AOP事务管理JDBCMVC框架and so on非侵入式设计:应用程序不需继承框架的类或接口即可使用框架提供的功能。方便代码重用和框架切换。
POJO:简单java对象,只包含业务逻辑或持久化逻辑。容器:提供运行环境,如Tomcat;管理对象生命周期和依赖关系,如Spring。AOP:AOP是aspect Oriented Programming的缩写,意思是面向切面编程。抽取通用的代码逻辑,在需要的时候动态织入到程序中去。Bean定义方式:
无参构造器:
<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>有参构造器:
<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2"> <!-- 指定构造器参数 --> <constructor-arg index="0" value="Hello Spring!"/> </bean>静态工厂方式
<!-- 使用静态工厂方法 --> <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"/> </bean>实例工厂方式
<!—1、定义实例工厂Bean --> <bean id="beanInstanceFactory" class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/> <!—2、使用实例工厂Bean创建Bean --> <bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"></constructor-arg> </bean>假如A类依赖B接口对象,这时B接口有多个实现类注册到了IOC容器中,在注入的时候,spring会报错:重复定义
Spring的IOC有两层含义:Bean依赖容器和容器注入Bean的依赖资源。好处如下:
动态替换Bean依赖对象,程序更灵活;更好实践面向接口编程,代码更清晰;更好实践优先使用对象组合,而不是继承;增加Bean可复用性;构造器注入 可分为三种:根据参数索引注入、根据参数类型注入、根据参数名注入,其中索引注入可靠性最高,参数类型注 入中除了制定类型外,还要按照构造函数的参数列表顺序来注入。 构造器注入是需要相应的构造函数的,Spring的BeanFactory会根据配置文件中配置的参数(即constructor)的个数、类型等属性来匹配构造器,如果构造器匹配失败则抛出异常
<!-- 直接用构造器进行类属性的注入 ,属性映射使用相应构造器的参数列表的index进行映射--><bean id="byIndex" class="com.rambo.domain.Person"> <constructor-arg index="0" value="Hello World!" /> <constructor-arg index="1" value="1" /></bean><!--使用静态工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+type进行映射 --><bean id="byType" class="com.rambo.domain.PersonStaticFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!" /> <constructor-arg type="int" value="2" /></bean><!--使用实例工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+name进行映射,不建议使用 --><bean id="byName" class="com.rambo.domain.PersonFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!" /> <constructor-arg name="index" value="3" /></bean>setter注入 其先通过默认构造器实例化Bean以后,再通过setter方法将属性设值,所以该类的默认构造器不能被覆盖。
<!-- 通过setter方式进行依赖注入 --> <bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4"> <property name="message" value="Hello World!"/> <property name="index"> <value>1</value> </property> </bean>可以看出来,value如果用简写的方式,指定的全是字符串,类型转换的工作有Spring容器来处理,如果转换出错将抛出相应的异常。 Spring类型转换系统对于boolean类型进行了容错处理,除了true/false外,还可以用yes/no、on/off、1/0来表示。
新闻热点
疑难解答