简单说一下spring,spring为什么叫spring
如何解决写爬虫IP受阻的问题?立即使用。
首先,我们简单介绍一下Spring。
Spring是一个开源的轻量级Java开发框架,它有两个核心:控制反转(IoC)和面向方面(AOP)。Java框架以声明的方式灵活管理事务,提高了开发效率和质量。
(推荐教程:java入门)
Spring框架并不局限于服务器端开发。从简单性、可测试性和松耦合的角度来看,任何Java应用程序都可以受益于Spring。Spring框架也是一个超级绑定平台,不仅提供了自身的功能,还提供了绑定其他技术和框架的能力。
接下来,我们来详细介绍一下具体内容。
控制反转(IOC)
大概,在以前,业务逻辑层的代码大概是这样写的:
公共类PersonServiceBean {
private person Dao person Dao=new person Dao bean();
公共无效保存(个人){
personDao.save(人);
}
}从上面可以看出,PersonDaoBean是在应用程序内部创建和维护的。所谓控制反转,是指应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责依赖对象的创建和维护。这样控制权就从应用程序转移到了外部容器,控制权的转移称为反转。
依赖注入(依赖注入)
当我们将依赖对象留给外部容器进行创建时,PersonServiceBean类可以更改如下:
公共类PersonServiceBean {
私人道私人道;
//通过构造函数参数,让容器将创建的依赖对象注入到PersonServiceBean中。当然也可以用setter的方法来注入。
公共人员服务Bean(人员道人员道){
this . person Dao=person Dao;
}
公共无效保存(个人){
personDao.save(人);
}
}所谓依赖注入,就是在运行时,外部容器将依赖对象动态注入到组件中。
为什么要用Spring?
至少在我看来,将Spring引入项目可以立即带来以下好处:
降低组件之间的耦合度,实现软件层之间的解耦。
您可以使用容器提供的许多服务,如事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员不再需要手动控制事务和处理复杂的事务传播。
有了容器单例模式的支持,开发者不再需要编写自己的实现代码。
容器提供AOP技术,可以轻松实现权限拦截、运行时监控等功能。
容器提供的很多辅助类,可以加快应用程序的开发,比如JdbcTemplate和HibernateTemplate。
它为Spring的主流应用框架提供集成支持,如Hibernate、JPA、Struts等。更便于应用开发。
使用Spring的好处
我们已经在上面详细列出了使用Spring框架的好处,我们将只阐述第二点。在使用Spring框架时,我们可以使用容器提供的许多服务。
想象一下,如果不使用Spring框架,那么使用Hibernate框架进行事务操作应该是:
Hibernate的事务操作:
公共void save(){
session session=session factory . getcurrentsession();
session . begin transaction();
info=new info( Spring Framework );
Info.setContent(阿云手把手教你学习Spring框架);
session . save(info);
session.getTransaction()。commit();
}既不使用Spring框架,也不使用Hibernate框架,直接使用最原始的JDBC技术进行事务操作,代码应该是:
JDBC的交易操作:
连接连接=空;
尝试{
.
conn . set auto commit(false);
statement stmt=conn . create statement();
Stmt。execute update( update person where name= Ye Tian );
conn . commit();
.
} catch(异常e) {
conn . roll back();
}最后{
conn . close();
}而如果使用Spring框架,那么我们就不再需要手动控制事务了。此外,如果我们使用Spring框架,我们不需要处理复杂的事务传播行为。我们举个例子说明一下。
(视频教程推荐:java课程)
例如,有一个代码:
公共作废支付(){
bean 1 . update();//更新金额
bean 2 . save();//记录操作日志
}公共类Bean1 {
Public void update(){ //注意:下面省略了一些代码
连接连接=空;
conn . set auto commit(false);
Statement.executeUpdate(更新帐套金额=?其中id=?);
}
}公共类Bean2 {
Public void save(){ //注意:下面省略了一些代码
连接连接=空;
conn . set auto commit(false);
Statement.executeUpdate(插入日志(内容)值(?));
}
}如果不使用Spring框架,下面两个业务需求怎么办?
第一个可能的业务需求:要求Bean1.update()和Bean2.save()在同一个事务中执行。
第二个可能的业务需求:无论Bean1.update()的交易是否成功,都要记录操作日志。
如果不使用Spring框架,对于第一个可能的业务需求,我们的解决方案用代码表示如下:
公共作废支付(){
连接连接=空;
conn . set auto commit(false);
bean 1 . update(conn);//更新金额
Bean2.save(连接);//记录操作日志
//.提交或回滚事务。
}公共类Bean1 {
public void update(connection conn){//注意:下面省略了一些代码
Statement.executeUpdate(更新帐套金额=?其中id=?);
}
}公共类Bean2 {
public void save(connection conn){//注意:下面省略了一些代码
Statement.executeUpdate(插入日志(内容)值(?));
}
}对于第二种可能的业务需求,我们可以不修改代码就完成,因为Bean1.update()打开一个事务,Bean2.save()也打开一个事务。Bean1.update()打开的事务的回滚不会影响Bean2.save()打开的事务。
如果使用Spring框架,只需要声明式的事务属性配置,就可以轻松实现这两个业务需求。
要求Bean1.update()和Bean2.save()在同一个事务中执行。我们只需要将代码改为:
@Transactional(传播=传播。必需的)
公共作废支付(){
bean 1 . update();//更新金额
bean 2 . save();//记录日志
}公共类Bean1 {
@Transactional(传播=传播。必需的)
公共void更新(){
executeUpdate(更新账套金额=?其中id=?);
}
}公共类Bean2 {
@Transactional(传播=传播。必需的)
公共void save(){
executeUpdate(插入到日志(内容)值(?));
}
}要求无论Bean1.update()的事务是否成功,都要记录日志。我们只需要将代码改为:
@Transactional(传播=传播。必需的)
公共作废支付(){
bean 1 . update();//更新金额
bean 2 . save();//记录日志
}公共类Bean1 {
@Transactional(传播=传播。必需的)
公共void更新(){
executeUpdate(更新账套金额=?其中id=?);
}
}公共类Bean2 {
@Transactional(传播=传播。要求新)
公共void save(){
executeUpdate(插入到日志(内容)值(?));
}
}轻量级和重量级概念的划分
经常有人问Spring是轻量级框架还是重量级框架。实际上,一个应用程序是轻量级还是重量级取决于它使用多少服务。使用的服务越多,容器要为普通java对象做的工作就越多,这必然会影响应用的发布时间或运行性能。
对于Spring容器,它提供了许多服务,但是这些服务在默认情况下不会为应用程序打开。应用需要某种服务,也需要注明该服务的用途。如果应用程序使用很少的服务,比如只使用Spring核心服务,那么我们可以认为此时应用程序是轻量级的。如果应用程序使用了Spring提供的大部分服务,这个时候应用程序就是重量级的。目前,EJB容器是一个重量级的,因为它默认为应用程序提供了EJB规范的所有功能。这就是你所知道的关于春天的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。