@Scope的使用很简单,直接在类上加上就行
@PostConstruct:相当于xml配置方式的init-method方法
@PreDestroy:相当于xml配置方式的destroy-method方法
例如:userService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.fz.annotation.service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.fz.annotation.dao.UserDao;
import com.fz.xml.entity.User;
@Service("userService")
@Scope("prototype")
public class UserService {
private UserDao userDao;
public void userAdd(){
User user = new User();
user.setUsername("zhangsan");
user.setPassword("zhangsan");
userDao.userAdd(user);
}
public UserDao getUserDao() {
return userDao;
}
@Resource(name="userDaoImpl")
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@PostConstruct
public void init(){
System.out.println("init...");
}
@PreDestroy
public void destroy(){
System.out.println("destroy...");
}
}applicationContext.xml配置很简单:
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
xsi:schemaLocation="http://www.springframework.org/schema/beans
<context:annotation-config/>
<context:component-scan base-package="com.fz.annotation"></context:component-scan>
</beans>
测试代码:
1
2
3
4
5
6
7
8
9
@Testpublic void getProperties(){
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext_annotation.xml");
UserService userService = (UserService) ctx.getBean("userService");
UserService userService1 = (UserService) ctx.getBean("userService");
userService.userAdd();
System.out.println(userService == userService1);
ctx.destroy();
}结果如下:
可以看出init还是执行了两次,两个对象也不是同一个对象,但是destroy同样还是不执行了。。。。