1 spring容器相当于一个工厂,这个工厂创造并控制了beans。同时解耦beans之间的控制权,使程序结构更加优化。
2 Bean对象创建的时机,默认是随着容器创建,可以使用lazy-init=true(在调用getBean创建)延迟创建。
3 Spring容器默认是通过单例模式创建Bean对象的,也就是说, 默认情况下,通过调用ac.getBean("mybean")方法获得的对象都是同一个bean对象。
使用单例模式有风险,风险在于多线程并发访问时会有一些状况。在配置文件加该属性scope="prototype",会new一个。
4 IOC 注解注入:首先需要在applicationContext.xml中添加<context:component-scan/> 组件自动扫描。
bean组件注解
@Service 用于Service业务组件@Control 用于Action控制组件@Respository 用于DAO数据访问组件
@Component 用于其他组件
依赖注入的注解标记
@Resource 按名称@Resource(name="id名")
@AutoWired 按名称
@Autowired
无 论使用@Resource还是@Autowried,我们不用再写set方法的。
其他注解:@Scope 等价于<bean scope="">
5 AOP相关概念 *
1) Aspect切面(方面)
指的是共通业务处理,可以切入到多个目标对象,可多次使用
2) JoinPoint连接点
指的是切面组件在目标对象上作用的位置, 例如:方法上戒者发生异常。
3) Pointcut切入点
切入点是连接点的集合,采用表达式指定
4) Target Object目标对象
5) Advice通知
指的是切面组件在连接点上执行的劢作。 例如:在方法调用前、方法调用后、方法调用前后等。
6) AutoProxy劢态代理
采用了AOP之后,容器返回的对象是代理对象。用户在使用时,由代理对象调用切面组件和 目标对象的功能。
a. 目标对象有接口采用JDK代理、
b. 目标对象没有接口采用CGLIB代理
这5种类型的通知,在内部调用时这样组织
try{ 调用前置通知 环绕前置处理 调用目标对象方法 环绕后置处理 调用后置通知 }
catch(Exception e)
{ 调用异常通知 }
finally
{ 调用最终通知 }
AOP在applicationContecx文件中的配置如下:
<aop:config>
<aop:pointcut expression="within(tarena.service..*)" id="servicePointcut"/>
<aop:aspect id="optLoggerAspect" ref="optLogger">
<aop:around method="logger" pointcut-ref="servicePointcut"/>
</aop:aspect>
</aop:config>
使用注解如下:
6 整合hibernate
a. 使用的API
HibernateDaoSupport
提供编写DAO组件的支持
HibernateTemplate
提供了增删改查操作
save():保存
update():更新
delete():删除
find():查询
如果需要分页查询,可以使用HibernateDaoSupport提供的
this.getSession()方法获取Session对象。
b. XML配置
首先配置连接池dataSource
其次配置SessionFactory
最后将SessionFactory注入给所有DAO组件