当前位置:网站首页>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'>
边栏推荐
- 2016 CCPC Hangzhou Onsite
- Internship log - day04
- flinkcdc采集oracle在snapshot阶段一直失败,这个得怎么调整啊?
- 20排位赛3
- How to become a senior digital IC Design Engineer (5-2) theory: ULP low power design technology (Part 1)
- Huffman encoded compressed file
- Pit encountered by vs2015 under win7 (successful)
- 用flinksql的方式 写进 sr的表,发现需要删除的数据没有删除,参照文档https://do
- Addition, deletion, modification and query of ThinkPHP database
- 2020ccpc Weihai J - Steins; Game (SG function, linear basis)
猜你喜欢
How will fashion brands enter the meta universe?
Octopus future star won a reward of 250000 US dollars | Octopus accelerator 2022 summer entrepreneurship camp came to a successful conclusion
Garbage disposal method based on the separation of smart city and storage and living digital home mode
Basic use of JMeter to proficiency (I) creation and testing of the first task thread from installation
【frida实战】“一行”代码教你获取WeGame平台中所有的lua脚本
中国首款电音音频类“山野电音”数藏发售来了!
基础篇:带你从头到尾玩转注解
内存==c语言1
js逆向教程第二发-猿人学第一题
【原创】程序员团队管理的核心是什么?
随机推荐
细说Mysql MVCC多版本控制
uboot机构简介
Impression notes finally support the default markdown preview mode
Diffusion模型详解
thinkphp数据库的增删改查
网上可以开炒股账户吗安全吗
Applet popup half angle mask layer
Before joining the chain home, I made a competitive product analysis for myself
Agile course training
Software modeling and analysis
Write VBA in Excel, connect to Oracle and query the contents in the database
In fact, it's very simple. It teaches you to easily realize the cool data visualization big screen
Internship log - day07
Analyze Android event distribution mechanism according to popular interview questions (I)
The industrial chain of consumer Internet is actually very short. It only undertakes the role of docking and matchmaking between upstream and downstream platforms
Strategic cooperation subquery becomes the secret weapon of Octopus web browser
Introduction to automated testing framework
2016 CCPC Hangzhou Onsite
sql 里面使用中文字符判断有问题,哪位遇到过?比如value&lt;&gt;`无`
Check the example of where the initialization is when C initializes the program