Spring注解:简化配置文件开发
注意在spring4.x使用注解需要导入spring-aop.jar spring-aop-4.2.4.RELEASE jar包
IoC注解: 替代了配置文件的<bean></bean> 为我们new一个对象
@Component (作用:会自动new一个对象) 默认id是类名首字母小写
@Component ("自定义id"):可以用在所有类头上,通用注解
mvc3层
Dao层: @Repository 用于dao层类或接口上
Service层: @Service
Controller层: @Controller
@Repository @Service @Controller 是@Component 的子类
DI注解:给对象注入属性值 写在属性的头上 或者set方法上
SpringDI 注解
一个类型对应一个对象时:
@Autowired 自动按类型装配(前提一个类型只有一个对象) 写在属性的头上 或者set方法上
@Qulifier("bean id/name"):指定要注入的bean id/name
注意一个类型对应多个对象时一定要使用@Qulifier
javaDI注解: 不稳定 会出问题 不建议使用
一个类型对应一个对象时:
@Resource 自动按名称注入 (找不到名称按类型注入)
private Ink ink;
如果一个类型对应多个对象时:
@Resource(name="bean id/name")
普通基本类型使用@Value("值")注解 进行注入
spring整合 Junit 需要导入 spring-test.jar
注意:
在属性头上使用注解进行注入,无需再添加set方法
反射:
1.Spring通过反射得到该属性:Field
2.Field.setAccessible(true);:打开访问权限
3.Field.set(对象名,属性值):实现DI
spring bean作用域:
singleton(单例)
prototype(多例,每次spring为我们创建新对象)
request(一次请求一个对象)
sessiom(一次会话一个对象)
globalsession
spring 默认使用单例(就一个对象)
使用@Scope更改bean的作用域
scope也可以在<bean></bean>中使用
好处单例:
好处:节省堆内存;坏处:有可能产生线程安全问题
多例:
好处:可以避免线程安全问题;坏处:每次都会创建新对象,浪费堆内存
手写单例:
单例:对象唯一
1.构造方法私有
2.对外提供共有方法,供外界访问该唯一对象
饥汉/饿汉模式 eager 饥渴,渴望
懒汉模式 lazy
为什么要使用spring整合 hibernate 等各种框架?
1.核心业务对象全部交给spring创建个管理.对代码进行解耦.方便后期统一维护
2.Spring对框架整合后 可以优化功能
3.spring把一些非核心代码(功能)进行了封装 ,通过springAOP实现无侵入化整合 例如事务控制 ,日志记录
Spring 整合Hibernate 的过程
通过Spring 的IOC和DI进行整合
1.导 IOC包 ,注解( spring-aop.jar ) 包 , hibernate包, 数据库驱动包 ,日志包 数据库连接池包, spring事务控制
2.建立db.properties
3.建立applicationContext.xml
4 通过spring读取.db.properties
<!--读取db.properties -->
<context:property-placeholder location="classpath:db.properties"/>
5.通过spring创建ComboPooledDataSource (c3p0数据源)
6.通过spring创建 LocalSessionFactorybean(SessionFactory)
7.建立实体POJO
8.使用hibernate注解进行映射
9.Dao 实现类继承HibernateDaoSupport support支持
hibernateTemplate封装了CRUD操作
hibernateDaoSupport----继承>hibernateTemplate----->sessionFactory 为了使用hibernateTemplate
为了使用hibernateTemplate- 必须注入sessionFactory
10.使用spring @Transactional注解实现事务控制
10.1加载spring整合hibernate 事务控制管理器 HibernateTransactionManager
10.2开始事务注解驱动
10.3使用@Transactional (不加它 在测试类只能进行查找,不能够对数据库进行处理)
Spring 整合HIbernate常用类
ComboPooledDataSource(c3p0连接池)
LocalSessionFactoryBean 是SessionFactory的一个实现类
封装的是getCurrentSession
HibernateTransationManager,
hibernateTemplate.find():Query.list(),返回值为list
HibernateTemplater相当于Session