Spring的总结
2015-12-24 10:28
537 查看
Spring部分
1 谈谈你对Spring的理解?(5分)
A
spring是一个IOC和AOP容器框架;可以大大的简化企业开发;
所谓的IOC和DI:说白了就是一个一个对象工厂,将对象的创建和销毁交给外部容器,即Spring进行管理;
Spring容器用反射机制调用javabean的默认构造函数进行创建,然后放入到spring的容器中;
根据你的配置不同,创建时机也不一样;
Spring中的AOP基于IOC,为什么这么说呢?这是因为AOP的原理是为目标类创建代理,创建代理的方式是:
1
当你的目标类实现了接口就用jdk的这个proxy
2
当你的目标类没有实现接口就要用CGLIB方式动态产生,他产生的类是目标类子类;
注意:如果你产生代理方式是动态选择的,即不知道是用jdk,还是cglib,先判断该类是否实现了接口,如果实现了
就用jdk,如果没有,就用cglib,因此请你仔细检查你目标类:是否实现了接口;
动态判断的情况下,如果你实现了一些标记接口,但是你实际是希望用CGLIB产生的,就会产生问题;
因此如果你的目标类都没有产生对象,即没有IOC容器,对象都没有,代理个啥呀;况且切面也是有Spring
IOC容器进行管理的
至于AOP和IOC下面已经有解释了就不赘述了
B:
对JDBC,及Hibernate进行简单封装,比如JdbcTemplate是对JDBC的轻量级封装,类似于DBUtils中的QueryRunner,
对HibernateTemplate工具类对hibernate进行封装;用他我们可以实现DAO设计模型(老王讲过的);--用session也可以的;
就是在dao层进行抽象,将所有dao共同的操作放到父类中取,子类继承就可以直接使用,
但是为了增强程序的可读性,请遵循命名规范;
代码如下:
这是所有crud操作的父接口;
public
interface DAO<T> {
public void persistent(T
t);//虽然和save方法的功能一样,但是hibernate官方推荐使用persistent,
public void update(T
t);
public void delete(Serializable id);
public T find(Serializable id);
public List<T>
listAll();
}
public
abstract class DaoBase<T> implements
DAO<T> {
//公有,并且要提供set方法因为要交给Spring进行管理,包括事务;
public HibernateTemplate hibernateTemplate;
private Class clazz;
public DaoBase() {
//
子类在初始化时,要调用父类的构造函数;可以通过这种方式获取到子类中的泛型实际参数
ParameterizedType type = (ParameterizedType)
this.getClass()
.getGenericSuperclass();
clazz = (Class)
type.getActualTypeArguments()[0];
}
public void persistent(T t) {
hibernateTemplate.persist(t);
}
public void
setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
UserDao接口继承自DAO<T>并提供泛型参数;他只要提供自己特有的方法,要实现类进行实现,实现类也就只要实现UserDao中
的方法,其他的继承自DaoBase;
实现类UserDaoImpl代码如下;
public class
UserDaoImpl extends DaoBase<User>
implements UserDao {
public User findUserByName(String username)
{
List<User> users =
hibernateTemplate.find(
1 谈谈你对Spring的理解?(5分)
A
spring是一个IOC和AOP容器框架;可以大大的简化企业开发;
所谓的IOC和DI:说白了就是一个一个对象工厂,将对象的创建和销毁交给外部容器,即Spring进行管理;
Spring容器用反射机制调用javabean的默认构造函数进行创建,然后放入到spring的容器中;
根据你的配置不同,创建时机也不一样;
Spring中的AOP基于IOC,为什么这么说呢?这是因为AOP的原理是为目标类创建代理,创建代理的方式是:
1
当你的目标类实现了接口就用jdk的这个proxy
2
当你的目标类没有实现接口就要用CGLIB方式动态产生,他产生的类是目标类子类;
注意:如果你产生代理方式是动态选择的,即不知道是用jdk,还是cglib,先判断该类是否实现了接口,如果实现了
就用jdk,如果没有,就用cglib,因此请你仔细检查你目标类:是否实现了接口;
动态判断的情况下,如果你实现了一些标记接口,但是你实际是希望用CGLIB产生的,就会产生问题;
因此如果你的目标类都没有产生对象,即没有IOC容器,对象都没有,代理个啥呀;况且切面也是有Spring
IOC容器进行管理的
至于AOP和IOC下面已经有解释了就不赘述了
B:
对JDBC,及Hibernate进行简单封装,比如JdbcTemplate是对JDBC的轻量级封装,类似于DBUtils中的QueryRunner,
对HibernateTemplate工具类对hibernate进行封装;用他我们可以实现DAO设计模型(老王讲过的);--用session也可以的;
就是在dao层进行抽象,将所有dao共同的操作放到父类中取,子类继承就可以直接使用,
但是为了增强程序的可读性,请遵循命名规范;
代码如下:
这是所有crud操作的父接口;
public
interface DAO<T> {
public void persistent(T
t);//虽然和save方法的功能一样,但是hibernate官方推荐使用persistent,
public void update(T
t);
public void delete(Serializable id);
public T find(Serializable id);
public List<T>
listAll();
}
public
abstract class DaoBase<T> implements
DAO<T> {
//公有,并且要提供set方法因为要交给Spring进行管理,包括事务;
public HibernateTemplate hibernateTemplate;
private Class clazz;
public DaoBase() {
//
子类在初始化时,要调用父类的构造函数;可以通过这种方式获取到子类中的泛型实际参数
ParameterizedType type = (ParameterizedType)
this.getClass()
.getGenericSuperclass();
clazz = (Class)
type.getActualTypeArguments()[0];
}
public void persistent(T t) {
hibernateTemplate.persist(t);
}
public void
setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
UserDao接口继承自DAO<T>并提供泛型参数;他只要提供自己特有的方法,要实现类进行实现,实现类也就只要实现UserDao中
的方法,其他的继承自DaoBase;
实现类UserDaoImpl代码如下;
public class
UserDaoImpl extends DaoBase<User>
implements UserDao {
public User findUserByName(String username)
{
List<User> users =
hibernateTemplate.find(
相关文章推荐
- struts2中默认拦截器栈中的拦截器…
- Java内存分析(转载)
- Struts2之Action处理多个方法总结
- Spring框架所有技术笔记总结
- JavaWeb基础回顾
- Struts2的笔记整理与复习
- Struts2.3.7技术的汇总之六(权限…
- 黑马程序员--Struts2.3.7技术的汇…
- 黑马程序员--Struts2.3.7技术的汇…
- 黑马程序员--Struts2.3.7技术的汇…
- Struts2.3.7技术的汇总之三(类型…
- Struts2.3.7技术的汇总之二(注册…
- 黑马程序员--Struts2的常量
- 黑马程序员--Struts2复习笔记
- JDK1.5并发库笔记和总结
- Java一些实用的类(持续更新)
- Java多线程基础知识回顾与总结;
- Java基础笔记的复习与整理---Socke…
- Java基础笔记的复习与整理--集合框…
- JDK1.5新特性回顾