您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
12-Spring注解开发-原始注解详解2(Value、Scope、PostConstruct、PreDestroy注解)
发布时间:2024-12-22 21:56:15编辑:雪饮阅读()
-
Value注解可以为类的属性注解普通属性类型的值,该普通属性类型的值可以是字面量,
也可以是从Spring Config配置文件中载入的Properties中可以读取的key
像是这样
@Value("${jdbc.driver}")
@PostConstruct注解相当于bean标签的init-method属性
@PreDestroy注解相当于bean标签的destroy-method属性
所以我们的dao层还可以进一步优化如:
package com.wzgy.dao.impl;
import com.User;
import com.wzgy.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
private int age;
@Value("${jdbc.driver}")
/*
@Value("zhangsan")
Value注解可以为类的属性注解普通属性类型的值,该普通属性类型的值可以是字面量,
也可以是从Spring Config配置文件中载入的Properties中可以读取的key
像是这样
@Value("${jdbc.driver}")
* */
private String name;
private List<String> strList;
private Map<String, User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public UserDaoImpl(){
System.out.println("-----UserDaoImpl被创建--------");
}
public void save() {
System.out.println("-----UserDaoImpl save: name:"+name+",age:"+age);
System.out.println("-----UserDaoImpl save: strList:"+strList+",userMap:"+userMap+",properties:"+properties);
}
@PostConstruct
/*
@PostConstruct注解相当于bean标签的init-method属性
*
* */
public void init(){
System.out.println("执行了init方法");
}
@PreDestroy
/*
@PreDestroy注解相当于bean标签的destroy-method属性
*
* */
public void destroy(){
System.out.println("执行了destroy方法");
}
}
Scope注解相当于bean标签的scope属性,例如
@Scope("prototype")相当于
scope="prototype"
所以我们的service层同样可以优化如:
package com.wzgy.service.impl;
import com.wzgy.dao.UserDao;
import com.wzgy.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("userService")
@Scope("prototype")
/*
* Scope注解相当于bean标签的scope属性,例如
* @Scope("prototype")相当于
* scope="prototype"
* */
public class UserServiceImplement implements UserService {
@Resource(name="userDao")
private UserDao userDao;
public UserServiceImplement() {}
public UserServiceImplement(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
那由于我们注解了destroy,所以我们的入口main方法调整如:
package com.web;
import com.wzgy.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Index2 {
public static void main(String[] args) {
ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("JDBCApplicationContext.xml");
UserService userService= app.getBean(UserService.class);
userService.save();
app.close();
}
}
关键字词:Value,Scope,PostConstruct,PreDestroy