当前位置:网站首页>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'>
边栏推荐
- CDZSC_2022寒假个人训练赛21级(2)
- Software modeling and analysis
- 大佬们,有没有遇到过flink cdc读MySQLbinlog丢数据的情况,每次任务重启就有概率丢数
- 请教个问题,我用sql-client起了个同步任务,从MySQL同步到ADB,历史数据有正常同步过去
- Win10安装VS2015
- 2016 CCPC Hangzhou Onsite
- Can't connect to MySQL server on '(10060) solution summary
- There is a problem using Chinese characters in SQL. Who has encountered it? Such as value & lt; & gt;` None`
- 基于智慧城市与储住分离数字家居模式垃圾处理方法
- Integer inversion
猜你喜欢
Basic chapter: take you through notes
字节跳动 Kitex 在森马电商场景的落地实践
[4g/5g/6g topic foundation -147]: Interpretation of the white paper on 6G's overall vision and potential key technologies -2-6g's macro driving force for development
“十二星座女神降临”全新活动推出
CSDN salary increase technology - learn about the use of several common logic controllers of JMeter
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
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)
【无标题】
[untitled]
随机推荐
PLC信号处理系列之开关量信号防抖FB
基础篇:带你从头到尾玩转注解
MySQL can connect locally through localhost or 127, but cannot connect through intranet IP (for example, Navicat connection reports an error of 1045 access denied for use...)
In addition to the objective reasons for overtime, what else is worth thinking about?
企业实战|复杂业务关系下的银行业运维指标体系建设
EXT2 file system
thinkphp3.2信息泄露
第十四次试验
Internship log - day07
[Frida practice] "one line" code teaches you to obtain all Lua scripts in wegame platform
CDZSC_2022寒假个人训练赛21级(1)
网上可以开炒股账户吗安全吗
JS逆向教程第一发
conda离线创建虚拟环境
Basic chapter: take you through notes
Performance optimization record of the company's product "yunzhujia"
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)
小程序滑动、点击切换简洁UI
【原创】程序员团队管理的核心是什么?