J2EE的Spring是怎么回事?谁能给我解释解释,我有点晕了
展开全部
Spring是一个轻型容器(light-weight
container),其核心是Bean工厂(Bean
Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented
Programming,
面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web
MVC和Spring
Web提供了Java
Web应用的框架或与其他流行的Web框架进行集成。
container),其核心是Bean工厂(Bean
Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented
Programming,
面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web
MVC和Spring
Web提供了Java
Web应用的框架或与其他流行的Web框架进行集成。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Spring有两个最大的特点:1.控制反转(IOC)[又称为依赖注入(DI)]
2.面向切面(AOP),我逐个解释。
在这之前,你需要理解耦合和内聚的概念,在这就不赘述了。
假设有一个接口BaseDao,一个BaseDao的实现类BaseDaoImpl
1.现在我另一个类叫Service1需要调用BaseDao中的某个方法,这时我们往往是new
BaseDaoImpl,当你调用了另一个功能类就产生了耦合度。假如一年之后你打算废弃BaseDaoImpl重新实现BaseDao,实现类叫BaseDaoImpl2,这时你就需要回来改动Service1--new
BaseDaoImpl2。咋一看不大费劲嘛,但你试想,如果有1000个像Service1这样的类都new了BaseDaoImpl,你要改多少次?1000次,这不累死人啦!不过解决这种问题的方法有多种,工厂模式是一种,Spring的控制反转是一种。
这里介绍什么叫控制反转,通俗的说就是把对象的实例化交给容器来处理,也就是你不需要new
BaseDaoImpl了,你只需要在Spring配置文件中配置就可以啦,在Service只需要创建一个BaseDao
baseDao,然后给它一个setter方法即可。这样的好处显而易见,如果我要把BaseDaoImpl换成BaseDaoImpl2,就只需要在配置文件中改就可以了(而且只需要改一句话即可)。
依赖注入的解释其实跟控制反转类似,我们new一个对象就对其产生了依赖,而通过Spring容器来管理对象的话,我们就把依赖关系交给了Spring,然后Spring通过注入的方法帮我们new对象,这样就很大程度减少了耦合关系。
2.面向切面,这个定义可以去网上搜,反正我觉得我是看不懂定义的。假设BaseDaoImpl中有一个save方法,实现数据的存储,但同时我希望用户用到这个save方法、query方法、delete方法、update方法的时候记录用户的调用时间(就是记录日志),这样我们通常会在每个方法中添上一句记录日志的语句。那么一年后我想让日志更丰富些,我让用户在调用以上方法的时候不仅记录调用时间,同时记录用户名,这怎么办?我们又得回去改源代码,每一个方法都得改,加入同样有1000个类似的Dao都要改以上方法,那么我们会改多少次?4000次!这种解决方法也有,就是用动态代理或者Spring的面向切面(其实原理也是代理)。只要用了面向切面,所有以上方法的日志记录代码都可以删除啦,你只需要自己新建一个类,专门写一个日志记录方法,然后通过Spring的AOP,就可以在每次调用save方法的时候调用日志类的日志方法,在不知不觉中明显降低了耦合度。
2.面向切面(AOP),我逐个解释。
在这之前,你需要理解耦合和内聚的概念,在这就不赘述了。
假设有一个接口BaseDao,一个BaseDao的实现类BaseDaoImpl
1.现在我另一个类叫Service1需要调用BaseDao中的某个方法,这时我们往往是new
BaseDaoImpl,当你调用了另一个功能类就产生了耦合度。假如一年之后你打算废弃BaseDaoImpl重新实现BaseDao,实现类叫BaseDaoImpl2,这时你就需要回来改动Service1--new
BaseDaoImpl2。咋一看不大费劲嘛,但你试想,如果有1000个像Service1这样的类都new了BaseDaoImpl,你要改多少次?1000次,这不累死人啦!不过解决这种问题的方法有多种,工厂模式是一种,Spring的控制反转是一种。
这里介绍什么叫控制反转,通俗的说就是把对象的实例化交给容器来处理,也就是你不需要new
BaseDaoImpl了,你只需要在Spring配置文件中配置就可以啦,在Service只需要创建一个BaseDao
baseDao,然后给它一个setter方法即可。这样的好处显而易见,如果我要把BaseDaoImpl换成BaseDaoImpl2,就只需要在配置文件中改就可以了(而且只需要改一句话即可)。
依赖注入的解释其实跟控制反转类似,我们new一个对象就对其产生了依赖,而通过Spring容器来管理对象的话,我们就把依赖关系交给了Spring,然后Spring通过注入的方法帮我们new对象,这样就很大程度减少了耦合关系。
2.面向切面,这个定义可以去网上搜,反正我觉得我是看不懂定义的。假设BaseDaoImpl中有一个save方法,实现数据的存储,但同时我希望用户用到这个save方法、query方法、delete方法、update方法的时候记录用户的调用时间(就是记录日志),这样我们通常会在每个方法中添上一句记录日志的语句。那么一年后我想让日志更丰富些,我让用户在调用以上方法的时候不仅记录调用时间,同时记录用户名,这怎么办?我们又得回去改源代码,每一个方法都得改,加入同样有1000个类似的Dao都要改以上方法,那么我们会改多少次?4000次!这种解决方法也有,就是用动态代理或者Spring的面向切面(其实原理也是代理)。只要用了面向切面,所有以上方法的日志记录代码都可以删除啦,你只需要自己新建一个类,专门写一个日志记录方法,然后通过Spring的AOP,就可以在每次调用save方法的时候调用日志类的日志方法,在不知不觉中明显降低了耦合度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询