7.3 依赖注入
- 设值注入:setter方法
- 构造注入:构造器
7.5 Spring 容器中的Bean
Spring超级大工厂—生产Bean
- 开发者:
①开发Bean
②配置Bean
- Spring框架:
①根据配置文件创建Bean实例
②调用Bean实例方法完成“依赖注入”
词汇:lazy:延迟;autowire:自动装配
容器中Bean作用域
配置方法:scope=”prototype” 或者 @Scope("prototype") 修饰xxxAction
- singleton:单例模式,只生成一个实例,每次请求该Bean都获得相同的实例。(默认)
- prototype:每次请求该id的Bean都会新建一个Bean实例返回给程序。
- request
- session
- global session
7.6 Spring 3.0提供的Java配置管理
Annotation(注释)
@Configuration:修饰Java配置类
@Bean:修饰一个方法,将该方法返回值定义成容器中的一个Bean
@Value:修饰一个Field,用于为该Field配置一个值,相当于配置一个变量
@Lazy:指定该Bean是否取消预初始化
@DependsOn:常用强制初始化其指定的其他Bean
7.7 创建Bean的三种方式 ?
- 调用构造器创建Bean(大多数时候通过new关键字调用构造器创建);
- 调用静态工厂方法创建Bean
- 调用实例工厂方法创建Bean
8.2 Spring“零配置”支持
Spring提供标注Spring Bean的几个Annotation(均修饰在Bean类的前面)
1. 自动搜索如下Annotation修饰的Bean类,并注册成实例
@Component:标注一个普通的Spring Bean类
@Controller("adminAction"):标注一个控制器组件类(一般修饰action)
@Service("adminService"):标注一个业务逻辑组件类(一般修饰service)
@Repository("adminDAO"):标注一个DAO组件类(一般修饰dao)
2. 指定Bean的作用域,默认为Singleton
@Scope("prototype")
3. 配置依赖
@Resource(name=”stoneAxe”),与<property…/>元素的ref属性效果相同
4. Spring 4.0自动装配和精确装配
@Autowired:修饰带多个参数的方法时,自动到容器中寻找匹配该方法参数类型的Bean,并以找到的Bean作为参数调用该方法;修饰实例变量时,Spring会把容器中与该类型匹配的Bean设置为该实例变量的值。
8.4 Spring的AOP
AOP(Aspect Orient Programming),面向切面编程,理解原理P644
基本概念
- 切面 Aspect
- 连接点 Joinpoint
- 增强处理 Advice
- 切入点 Pointcut
8.6 Spring的事务
参考:http://www.blogjava.net/robbie/archive/2009/04/05/264003.html
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。
8.7 Spring整合Struts 2
8.8 Spring整合Hibernate
Hibernate Template 和 HibernateDaoSupport
1. Hibernate Template常用方法,可完成大多数DAO对象的 CRUD操作:
- delete(Object entity): 删除指定持久化实例。
- deleteAll(Collection entities): 删除集合内全部持久化类实例。
- find(String queryString): 根据 HQL 查询字符串来返回实例集合。
- findByNamedQuery(String queryName): 根据命名查询返回实例集合。
- get(Classentity Class,Serializable id): 根据主键加载特定持久化类的实例。
- save(Object entity): 保存新的实例。
- saveOrUpdate(Object entity): 根据实例状态,选择保存或者更新。
- update(Object entity): 更新实例的状态,要求entity 是持久状态。
- setMaxResults(intmax Results): 设置分页的大小。
2. HibernateDaoSupport常用方法:
- public final HibernateTemplate getHibernateTemplate()
- public final void setSessionFactory(SessionFactory sessionFactory)
示例代码:
public void deleteProjectById(Integer projectId) { // TODO Auto-generated method stub Project project = this.getHibernateTemplate().get(Project.class, projectId); this.getHibernateTemplate().delete(project); this.getHibernateTemplate().flush(); }
未完待续...