当前位置:网站首页>Bean operation domain and life cycle
Bean operation domain and life cycle
2022-07-07 10:02:00 【Youcan.】
Catalog
2.1.1 singleton Single case scope
2.1.2 prototype Prototype scope ( Multiple scope )
2.1.4 session Conversation scope
2.1.5 application Global scope ( Understanding can )
2.1.6 websocket( Understanding can )
3.1 Spring Execute the process
3.2.1 Instantiation ( Buy a house in the city )
3.2.2 Set properties ( decorate )
3.2.3 Bean initialization ( Buy all kinds of new furniture )
3.2.5 The destruction Bean( sell-out )
1. Bean Modified case
There is a public Bean ,A Users and B Shared by users , If A In use , Public resources Bean Revised , It can lead to B The user made an error while using .
A user (Controller9) When using, it is modified :
@Controller
public class UserController9 {
@Autowired
private User user1;
public User getUser() {
User user = user1;
user.setName(" Tang's monk ");
return user;
}
}
B user (Controller9) Use public resources :
@Controller
public class UserController10 {
@Autowired
private User user1;
public User getUser() {
return user1;
}
}
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
public class App {
public static void main(String[] args) {
// 1. obtain spring Context
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
UserController9 userController9 = context.getBean(UserController9.class);
System.out.println("Controller9 : " + userController9.getUser());
UserController10 userController10 = context.getBean(UserController10.class);
System.out.println("Controller10 : " + userController10.getUser());
}
}
Output :Controller9 : User{id=1, name=' Tang's monk ', password='123'}
Controller10 : User{id=1, name=' Tang's monk ', password='123'}
In fact, we want Controller10 Output :Controller10 : User{id=1, name=' Zhang San ', password='123'}
public class App {
public static void main(String[] args) {
// 1. obtain spring Context
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
if(userController9 == userController9_2) {
System.out.println(" Memory addresses are equal , The singleton pattern ");
System.out.println(userController9);
System.out.println(userController9_2);
} else {
System.out.println(" Memory addresses are not equal , Not singleton mode ");
System.out.println(userController9);
System.out.println(userController9_2);
}
}
}
Output :
Memory addresses are equal , The singleton pattern
[email protected]
[email protected]
Using singleton mode will greatly improve performance , therefore spring in Bean The default scope of is The singleton pattern (singleton). That is, all people use the same object .
2. Scope definition
After the occurrence of the above problems , Limits the available range of variables in the program , That is to define Scope .
Bean Scope of action Refer to Bean stay Spring Some kind of behavior pattern in the whole framework , For example, singleton scope , It means Bean Throughout Spring Only one of them , And it is shared globally , After others modify this value , What people behind read is the modified value .
2.1 Bean Of 6 Species scope
Spring The container is initializing a Bean When an instance of the , The scope of the instance is also specified .
1. singleton : Single case scope
2. prototype : Prototype scope ( Multiple scope )
3. request : Request scope
4. session : Conversation scope
5. application : Global scope
6. websocket :HTTP WebSocket Scope
The first two are Spring Core scope , The last four are Spring MVC Scope in
2.1.1 singleton Single case scope
describe : Under this scope Bean stay loC In the container There is only one instance : obtain Bean(applicationContext.getBean Other methods ) And assembly Bean ( adopt @Autowired notes ⼊) It's all the same thing .
scene : No state Of Bean Use this scope , Stateless means Bean The attribute state of the object No need to update
Spring The scope is selected by default
2.1.2 prototype Prototype scope ( Multiple scope )
describe : Every time you make a comparison of Bean All requests will Create a new instance : obtain Bean And assembly Bean Are instances of experience objects .
scene : A stateful Of Bean Use this scope
2.1.3 request Request scope
describe : Every time http Request meeting Create a new Bean example , Be similar to prototype
scene : once http Get requests and responses share Bean
stay SpringMVC Use in
2.1.4 session Conversation scope
describe : In a http session Define a Bean example
scene : Of the user session share Bean , such as : Record a user's login information
stay SpringMVC Use in
2.1.5 application Global scope ( Understanding can )
2.1.6 websocket( Understanding can )
Single case scope (singleton) and Global scope (application) The difference between :
The scope of the single case is Spring Core ( Common projects ) Scope of action , The global scope is Spring Web Scope in .
The scope of a singleton acts on loC The container of , and The global scope works on Servlet Containers .
2.2 Set scope
@Scope Tags can modify both methods and classes ,@Scope There are two settings :
1. Set the value directly :@Scope("prototype")
2. ( Constant ) Similar to enumeration settings :@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UserBeans2 {
@Bean(name = "user1")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public User user1(){
User user = new User();
user.setId(1);
user.setName(" Zhang San ");
user.setPassword("123");
return user;
}
}
@Controller
public class UserController9 {
@Autowired
private User user1;
public User getUser() {
User user = user1;
user.setName(" Tang's monk ");
return user;
}
}
public class App {
public static void main(String[] args) {
// 1. obtain spring Context
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
UserController9 userController9 = context.getBean(UserController9.class);
System.out.println("Controller9 : " + userController9.getUser());
UserController10 userController10 = context.getBean(UserController10.class);
System.out.println("Controller10 : " + userController10.getUser());
}
}
}
Output :Controller9 : User{id=1, name=' Tang's monk ', password='123'}
Controller10 : User{id=1, name=' Zhang San ', password='123'}
modify UserBeans2 Code :
@Component
public class UserBeans2 {
@Bean(name = "user1")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public User user1(){
User user = new User();
user.setId(1);
user.setName(" Zhang San ");
user.setPassword("123");
return user;
}
}
Output :
Controller9 : User{id=1, name=' Tang's monk ', password='123'}
Controller10 : User{id=1, name=' Tang's monk ', password='123'}
3. Bean Principle analysis
3.1 Spring Execute the process
start-up Spring Containers -----》 Complete according to the configuration Bean initialization -----》Bean Object registered to Spring Containers in ( save )-----》 take Bean Assemble into the required class ( take )
3.2 Bean Life cycle
The whole life process of an object from birth to destruction .
1. Instantiation
2. Set properties
3. Bean initialization
4. Use Bean
5. The destruction Bean
3.2.1 Instantiation ( Buy a house in the city )
by Bean Allocate space . Instantiation is not equal to initialization , Just allocate memory space
3.2.2 Set properties ( decorate )
Execute the injection and assembly of dependent classes (A Need to use B Methods , Initialize first , And will B Load into the current class )
3.2.3 Bean initialization ( Buy all kinds of new furniture )
(1) Realize all kinds of Aware Notification method
(2) Execute initialization pre method
(3) Execute initialization method ( Two implementations : Annotation mode @PostConstruct or XML<bean init - method='xxx'>)
(4) Execute your own designated init - method Method
(5) Execute post initialization method
3.2.4 Use Bean( To stay in )
3.2.5 The destruction Bean( sell-out )
There are two realizations : Annotation mode @PreDestroy,XML<bean destroy - method='xxx'>
边栏推荐
- 请教个问题,我用sql-client起了个同步任务,从MySQL同步到ADB,历史数据有正常同步过去
- 能源路由器入门必读:面向能源互联网的架构和功能
- La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2
- CentOS installs JDK1.8 and mysql5 and 8 (the same command 58 in the second installation mode is common, opening access rights and changing passwords)
- CodeForces - 1324D Pair of Topics(二分或双指针)
- Analyze Android event distribution mechanism according to popular interview questions (II) -- event conflict analysis and handling
- Flinkcdc failed to collect Oracle in the snapshot stage. How do you adjust this?
- Huffman encoded compressed file
- CDZSC_ 2022 winter vacation personal training match level 21 (2)
- Analyze Android event distribution mechanism according to popular interview questions (I)
猜你喜欢
Deep understanding of UDP, TCP
Pit using BigDecimal
Lesson 1: finding the minimum of a matrix
AI moves from perception to intelligent cognition
【frida实战】“一行”代码教你获取WeGame平台中所有的lua脚本
In fact, it's very simple. It teaches you to easily realize the cool data visualization big screen
PLC信号处理系列之开关量信号防抖FB
Qualifying 3
Garbage disposal method based on the separation of smart city and storage and living digital home mode
CentOS installs JDK1.8 and mysql5 and 8 (the same command 58 in the second installation mode is common, opening access rights and changing passwords)
随机推荐
ORM模型--数据记录的创建操作,查询操作
ORM--分组查询,聚合查询,查询集QuerySet对象特性
Why are social portals rarely provided in real estate o2o applications?
**Grafana installation**
2016 CCPC Hangzhou Onsite
[Frida practice] "one line" code teaches you to obtain all Lua scripts in wegame platform
Detailed explanation of diffusion model
Flinkcdc failed to collect Oracle in the snapshot stage. How do you adjust this?
有没有大佬帮忙看看这个报错,有啥排查思路,oracle cdc 2.2.1 flink 1.14.4
Internship log - day07
Basic use of JMeter to proficiency (I) creation and testing of the first task thread from installation
HCIP 第一天 笔记整理
PostgreSQL reports an error when creating a trigger,
C socke server, client, UDP
Gauss elimination
终于可以一行代码也不用改了!ShardingSphere 原生驱动问世
网上可以开炒股账户吗安全吗
C# 初始化程序时查看初始化到哪里了示例
La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2
位操作==c语言2