控制反转:控制权反转(由硬编码来创建对象实例--依赖)



对象的生命周期交给容器管理,另外依赖关系也交由容器。



依赖倒转原则:



0耦合



具体耦合:



抽象耦合:



依赖注入:构造注入、set注入、自动注入(spring IOC)





任何class都是bean



1、配置springXML配置文件,头文件



说明使用了spring的bean功能



例如用了aop,则在头部增加aop的命名空间



2、导包



shift点中第一个,再点最后一个,选中全部包





toString 复写



在实体类中快速复写一个toString方法,自动把实体类中的属性打印出来



然后在dao层调用打印order对象时,就自动调用复写过的toString方法,可以测试



实体类的数值是否已经写进去。





利用spring容器加载来动态加载数据,不用写死在实体类中。



通过配置文件的





只有一个构造方法是首字母大写的。





多例是为了多线程,单例并发会产生脏数据,线程不安全



专门扫描com.demo.service包里的类,并且得在对应的类里面加上@Service或者@Component





Aop



系统级关注点,经常使用的代码,在整个项目中经常出现(日志,事务支持、异常处理)



代码重用,减少系统级的冗余代码。只关注核心业务



代码片的组装,分离代码



事务管理(多个任务完成一个事务):要么都执行,要么都不执行



在dao层,会话工厂生产会话(dao层与数据层的会话)



分为:切面、通知->前置、后置、异常、最终、环绕(切入位置)



不可以返回,环绕则可以返回数据。



切面就是一个类,由切点(标记切入位置)和通知构成。



@aspect



切点表达式,



@Pointcut("execution(* transfer(..))")



任何返回值、参数列表,方法名为transfer的方法都拦截。





spring用了组件自动扫描之后,bean的创建模式默认为单例模式,需要在相应的类里面加上scope="prototype",则换成多例模式



@Service("userBiz")@Scope("prototype")



组件自动扫描





并发:同步锁(代码量较少)、多实例