Home Java Javagetting Started Do you know what Spring is?

Do you know what Spring is?

Aug 20, 2020 pm 04:19 PM
spring

Do you know what Spring is?

First of all, let’s briefly introduce Spring.

Spring is an open source lightweight Java development framework with two cores: Inversion of Control (IoC) and Aspect Oriented (AOP). The Java Spring framework flexibly manages transactions in a declarative manner, improving development efficiency and quality.

(Recommended tutorial: java introductory tutorial)

The Spring framework is not limited to server-side development. Any Java application can benefit from Spring in terms of simplicity, testability, and loose coupling. The Spring framework is also a super glue platform. In addition to providing its own functions, it also provides the ability to glue other technologies and frameworks.

Next let’s introduce the specific content in detail.

Inversion of Control (IOC)

About the past, the code of the business logic layer was likely to be written like this:

public class PersonServiceBean {
     private PersonDao personDao = new PersonDaoBean();

      public void save(Person person){
            personDao.save(person);
     }
}
Copy after login

It can be seen from the above that PersonDaoBean is created inside the application and maintained. The so-called inversion of control means that the application itself is not responsible for the creation and maintenance of dependent objects. The creation and maintenance of dependent objects is the responsibility of the external container. In this way, control is transferred from the application to the external container. The transfer of control is called reversal.

Dependency Injection

When we hand over the dependency object to the external container for creation, then the PersonServiceBean class can be changed as follows:

public class PersonServiceBean {
     private PersonDao personDao ;
     // 通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。
     public PersonServiceBean(PersonDao personDao){
         this.personDao=personDao;
     }  
     public void save(Person person){
         personDao.save(person);
     }
}
Copy after login

The so-called dependency injection refers to : During runtime, the external container dynamically injects dependent objects into the component.

Why use Spring?

At least in my opinion, introducing Spring into the project can immediately bring the following benefits:

Reduce the coupling between components and achieve decoupling between the various layers of the software.

Do you know what Spring is?

You can use many services provided by the container, such as transaction management services, message services, etc. When we use containers to manage transactions, developers no longer need to manually control transactions, nor do they need to deal with complex transaction propagation.

The container provides singleton mode support, and developers no longer need to write implementation code themselves.

Containers provide AOP technology, which can easily be used to implement functions such as permission interception and runtime monitoring.

Containers provide many auxiliary classes. Using these classes can speed up application development, such as: JdbcTemplate, HibernateTemplate.

Spring provides integrated support for mainstream application frameworks, such as integrating Hibernate, JPA, Struts, etc., which makes application development easier.

Benefits of using Spring

We have listed the benefits of using the Spring framework in detail above, and we will only elaborate on the second point. When using the Spring framework, we can use numerous services provided by the container.

Do you know what Spring is?

Imagine if you don’t use the Spring framework, then using the Hibernate framework for transaction operations should be:

Hibernate transaction operations:

public void save(){
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Info info = new Info("Spring框架");
    info.setContent("阿昀手把手教你学习Spring框架");
    session.save(info);
    session.getTransaction().commit();
}
Copy after login

Neither the Spring framework nor the Hibernate framework is used, and the most primitive JDBC technology is directly used for transaction operations. The code should be:

JDBC transaction operation:

Connection conn = null;
try {
    ......
    conn.setAutoCommit(false);
    Statement stmt = conn.createStatement();
    stmt.executeUpdate("update person where name='叶天'");
    conn.commit();
    ......
} catch (Exception e) { 
    conn.rollback(); 
} finally {
    conn.close();
}
Copy after login

And if Using the Spring framework, we no longer need to manually control transactions. In addition, if we use the Spring framework, we do not need to deal with complex transaction propagation behavior. Let us illustrate this with an example.

(Video tutorial recommendation: java course)

For example, there is code:

public void payment(){
    Bean1.update(); // 更新金额
    Bean2.save(); // 记录操作日志
}
Copy after login
public class Bean1 { 
    public void update(){ // 注意:下面省略了一些代码
        Connection conn = null;
        conn.setAutoCommit(false);
        Statement.executeUpdate("update account set amount=? where id=?");  
    }
}
Copy after login
public class Bean2 {
    public void save(){ // 注意:下面省略了一些代码
        Connection conn = null;
        conn.setAutoCommit(false);
        Statement.executeUpdate("insert into Log (content) values (?)");
    }
}
Copy after login

If we do not use the Spring framework, for the following two Business needs, how should we do it?

The first possible business requirement: requires Bean1.update() and Bean2.save() to be executed in the same transaction.

The second possible business requirement: It is required to record the operation log regardless of whether the transaction of Bean1.update() is successful or not.

If you do not use the Spring framework, for the first possible business requirement, our solution is expressed in code:

public void payment(){
    Connection conn = null;
    conn.setAutoCommit(false);
    Bean1.update(conn); // 更新金额
    Bean2.save(conn); // 记录操作日志
    // ...提交或回滚事务
}
Copy after login
public class Bean1 { 
    public void update(Connection conn){ // 注意:下面省略了一些代码
        Statement.executeUpdate("update account set amount=? where id=?");  
    }
}
Copy after login
public class Bean2 {
    public void save(Connection conn){ // 注意:下面省略了一些代码
        Statement.executeUpdate("insert into Log (content) values (?)");
    }
}
Copy after login

For the second possible business requirement, we do not It can be completed by modifying the code, because Bean1.update() opens a transaction, and Bean2.save() also opens a transaction. The rollback of the transaction started by Bean1.update() will not affect Bean2.save() Opened transaction.

If we use the Spring framework, we can easily achieve these two business requirements through declarative transaction attribute configuration.

Requires Bean1.update() and Bean2.save() to be executed in the same transaction. We only need to change the code to:

@Transactional(propagation=Propagation.Required)
public void payment(){
    Bean1.update(); // 更新金额
    Bean2.save(); // 记录日志
}
Copy after login
Copy after login
public class Bean1 {
    @Transactional(propagation=Propagation.Required)
    public void update(){
        executeUpdate("update account set amount=? where id=?");    
    }
}
Copy after login
Copy after login
public class Bean2 {
    @Transactional(propagation=Propagation.Required)
    public void save(){
        executeUpdate("insert into Log (content) values (?)");
    }
}
Copy after login

Requires that the log needs to be recorded regardless of whether the Bean1.update() transaction is successful or not. We only need to change the code to:

@Transactional(propagation=Propagation.Required)
public void payment(){
    Bean1.update(); // 更新金额
    Bean2.save(); // 记录日志
}
Copy after login
Copy after login
public class Bean1 {
    @Transactional(propagation=Propagation.Required)
    public void update(){
        executeUpdate("update account set amount=? where id=?");    
    }
}
Copy after login
Copy after login
public class Bean2 {
    @Transactional(propagation=Propagation.RequiresNew)
    public void save(){
        executeUpdate("insert into Log (content) values (?)");
    }
}
Copy after login

Division of lightweight and heavyweight concepts

People often ask whether Spring is a lightweight framework or a heavyweight framework? In fact, whether an application is classified as lightweight or heavyweight mainly depends on how many services it uses. The more services used, the more work the container has to do for ordinary Java objects, which will inevitably affect the application release time or running performance.

Do you know what Spring is?

For the Spring container, it provides many services, but these services are not opened by the application by default. The application needs a certain service and needs to specify the use of the service. , if the application uses very few services, such as only using Spring core services, then we can consider the application to be lightweight. If the application uses most of the services provided by Spring, then the application is heavyweight. . The current EJB container is heavyweight because it provides applications with all the functions in the EJB specification by default.

The above is the detailed content of Do you know what Spring is?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

A new programming paradigm, when Spring Boot meets OpenAI A new programming paradigm, when Spring Boot meets OpenAI Feb 01, 2024 pm 09:18 PM

In 2023, AI technology has become a hot topic and has a huge impact on various industries, especially in the programming field. People are increasingly aware of the importance of AI technology, and the Spring community is no exception. With the continuous advancement of GenAI (General Artificial Intelligence) technology, it has become crucial and urgent to simplify the creation of applications with AI functions. Against this background, "SpringAI" emerged, aiming to simplify the process of developing AI functional applications, making it simple and intuitive and avoiding unnecessary complexity. Through "SpringAI", developers can more easily build applications with AI functions, making them easier to use and operate.

Use Spring Boot and Spring AI to build generative artificial intelligence applications Use Spring Boot and Spring AI to build generative artificial intelligence applications Apr 28, 2024 am 11:46 AM

As an industry leader, Spring+AI provides leading solutions for various industries through its powerful, flexible API and advanced functions. In this topic, we will delve into the application examples of Spring+AI in various fields. Each case will show how Spring+AI meets specific needs, achieves goals, and extends these LESSONSLEARNED to a wider range of applications. I hope this topic can inspire you to understand and utilize the infinite possibilities of Spring+AI more deeply. The Spring framework has a history of more than 20 years in the field of software development, and it has been 10 years since the Spring Boot 1.0 version was released. Now, no one can dispute that Spring

What are the implementation methods of spring programmatic transactions? What are the implementation methods of spring programmatic transactions? Jan 08, 2024 am 10:23 AM

How to implement spring programmatic transactions: 1. Use TransactionTemplate; 2. Use TransactionCallback and TransactionCallbackWithoutResult; 3. Use Transactional annotations; 4. Use TransactionTemplate in combination with @Transactional; 5. Customize the transaction manager.

How to implement scheduled tasks in Java Spring How to implement scheduled tasks in Java Spring May 24, 2023 pm 01:28 PM

Java implements scheduled tasks In the library that comes with Jdk, there are two ways to implement scheduled tasks, one is Timer, and the other is ScheduledThreadPoolExecutor. When Timer+TimerTask creates a Timer, it creates a thread, which can be used to schedule TimerTask tasks. Timer has four construction methods, and you can specify the name of the Timer thread and whether to set it as a daemon thread. The default name is Timer-number, and the default is not a daemon thread. There are three main methods: cancel(): terminate task scheduling, cancel all currently scheduled tasks, running tasks will not be affected purge(): remove tasks from the task queue

The differences and connections between Spring Boot and Spring Cloud The differences and connections between Spring Boot and Spring Cloud Jun 22, 2023 pm 06:25 PM

SpringBoot and SpringCloud are both extensions of Spring Framework that help developers build and deploy microservice applications faster, but they each have different purposes and functions. SpringBoot is a framework for quickly building Java applications, allowing developers to create and deploy Spring-based applications faster. It provides a simple, easy-to-understand way to build stand-alone, executable Spring applications

The 7 most commonly used annotations in Spring, the most powerful organization in history! The 7 most commonly used annotations in Spring, the most powerful organization in history! Jul 26, 2023 pm 04:38 PM

With the update and iteration of technology, Java5.0 began to support annotations. As the leading framework in Java, spring has slowly begun to abandon xml configuration since it was updated to version 2.5, and more annotations are used to control the spring framework.

How to set transaction isolation level in Spring How to set transaction isolation level in Spring Jan 26, 2024 pm 05:38 PM

How to set the transaction isolation level in Spring: 1. Use the @Transactional annotation; 2. Set it in the Spring configuration file; 3. Use PlatformTransactionManager; 4. Set it in the Java configuration class. Detailed introduction: 1. Use the @Transactional annotation, add the @Transactional annotation to the class or method that requires transaction management, and set the isolation level in the attribute; 2. In the Spring configuration file, etc.

Learn Spring Cloud from scratch Learn Spring Cloud from scratch Jun 22, 2023 am 08:11 AM

As a Java developer, learning and using the Spring framework is an essential skill. With the popularity of cloud computing and microservices, learning and using Spring Cloud has become another skill that must be mastered. SpringCloud is a development toolset based on SpringBoot for quickly building distributed systems. It provides developers with a series of components, including service registration and discovery, configuration center, load balancing and circuit breakers, etc., allowing developers to build micro

See all articles