您的位置:首页 > 编程语言 > Java开发

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(

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: