其他相关注解

一、作用域注解

  • 原 xml 配置: 配置属性 scope="prototype"
1
<bean id="bookDao" class="cn.pangcy.dao.impl.BookDaoImpl" scope="prototype" />
  • 现使用注解: @Scope("prototype)"
1
2
3
4
5
@Repository
@Scope("prototype")
public class BookDaoImpl implements BookDao(){
// TODO: ....
}

二、使用生命周期注解

  • 原继承方式:
    • 通过继承 InitializingBean 重写 afterPropertiesSet方法实现 初始化钩子
    • 通过继承DisposeableBean 重写 destory 方法实现 销毁钩子
1
2
3
4
5
6
7
8
9
10
11
public class BookDaoImpl implements BookDao, InitializingBean, DisposableBean(){
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("service init ...");
}

@Override
public void destroy(){
System.out.println("service destroy ...");
}
}
  • 现注解方式:
    • 使用 @PostConstruct 注解实现初始化钩子
    • 使用 @PreDestroy 注释实现销毁钩子
1
2
3
4
5
6
7
8
9
10
11
12
@Repository
public class BookDaoImpl implements BookDao(){
@PostConstruct
public void init(){
// TODO: service init ...
}

@PreDestroy
public void destroy(){
// TODO: service destroy ...
}
}

三、使用注解自动装配

  • 使用 @Autowired 注解开启自动装配模式(按类型)
1
2
3
4
5
6
7
8
9
10
@Service("bookService")
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;

public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}

注意

  1. 自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因为无需提供 setter 方法
  2. 自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
  • 使用 @Qualifier 注解开启指定名称装配bean
1
2
3
4
5
6
@Service
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier("bookDao")
private BookDao bookDao;
}

注意:@Qualifier 注解无法单独使用,必须配合 @Autowired 注解使用

  • 使用 @Value 实现简单类型注入
1
2
3
4
5
6
7
8
9
@Service
public class BookServiceImpl implements BookService {
@Value("www.pangcy.cn")
private String domain;

// 获取从配置文件中注入的值
@Value("${jdbc.url}")
private String url;
}

四、使用配置文件注解

  • 原 xml 配置: 配置 context 命名空间,指定 location
1
<context:property-placeholder location="jdbc.properties" />
  • 现注解方式: 在 SpringConfig 类中加入 @PropertySource 注解
    • 如果有多个配置文件传入一个数组:{ jdbc1.properties, jdbc2.properties, ... }
    • 注意: 不允许使用通配符 *
1
2
3
4
5
6
@Configuration
@ComponentScan("cn.pangcy")
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
// ...
}

其他相关注解
https://blog.pangcy.cn/2023/04/05/后端编程相关/java/spring/其他相关注解/
作者
子洋
发布于
2023年4月5日
许可协议