使用注解方式实现Spring IoC
17-spring 其他元数据注解
常用的元数据注解如下:
注解 | 说明 |
---|---|
@Primary | 按类型装配时出现多个相同类型对象,拥有此注解对象优先被注入 |
@PostConstruct | 描述方法,相当于XML中init-method配置的注解版本 |
@PreDestroy | 描述方法,相当于XML中的destroy-method配置的注解版本 |
@Scope | 设置对象的Scope属性 |
@Value | 为属性注入静态数据 |
@Scope与@PostConstruct示例用法
package com.torey.spring.ioc.service;
/**
* @Author http://torey611.gitee.io/li-tao-feng/
* @Email torey6061@qq.com
* @Date 2021/4/30 20:22
* @描述:
*/
import com.torey.spring.ioc.dao.IUserDao;
import com.torey.spring.ioc.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Service
@Scope("prototype")//@Scope用于设置这个对象是单例||多例,与XML中bean scope完全相同
public class UserService {
public UserService() {
System.out.println(this.getClass().getName() + "正在被创建,无参构造函数");
}
@PostConstruct //与XML中bean init-method完全相同
public void init(){
System.out.println(this.getClass().getName() + ".init();初始化UserServer对象");
}
@Autowired
private IUserDao userDao;
public void getById(Long id){
System.out.println(this.getClass().getName() + ".getById()");
userDao.getById(id);
}
}
@Value用法示例代码
在resources目录下新建config.properties文件,内容如下:
metaData=com.torey
mysql.username=root
mysql.password=root123
在applicationContext.xml文件新增一句
<!--通知spring ioc容器初始化时加载属性文件-->
<context:property-placeholder location="classpath:config.properties"/>
applicationContext.xml文件内容整体如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--通知spring ioc容器初始化时加载属性文件-->
<context:property-placeholder location="classpath:config.properties"/>
<!--在IoC容器初始化时自动扫描四种组件类型注解并完成实例化
@Repository @Service @Controller @Component
-->
<context:component-scan base-package="com.torey.spring.ioc.*"></context:component-scan>
</beans>
在java代码中使用@Value获取config.properties中配置信息
@Value("${metaData}")//读取config.yml的metaData属性值
private String metaData;
@Value("${mysql.username}")
private String sqlUserName;
@Value("${mysql.password}")
private String sqlPassWord;
java示例代码如下:
package com.torey.spring.ioc.service;
/**
* @Author http://torey611.gitee.io/li-tao-feng/
* @Email torey6061@qq.com
* @Date 2021/4/30 20:22
* @描述:
*/
import com.torey.spring.ioc.dao.IUserDao;
import com.torey.spring.ioc.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Service
@Scope("prototype")//@Scope用于设置这个对象是单例||多例,与XML中bean scope完全相同
public class UserService {
@Value("${metaData}")//读取config.yml的metaData属性值
private String metaData;
@Value("${mysql.username}")
private String sqlUserName;
@Value("${mysql.password}")
private String sqlPassWord;
public UserService() {
System.out.println(this.getClass().getName() + "正在被创建,无参构造函数");
System.out.println("metaData=" + this.metaData);
}
@PostConstruct //与XML中bean init-method完全相同
public void init(){
System.out.println(this.getClass().getName() + ".init();初始化UserServer对象");
System.out.println("测试@Value: metaData=" + this.metaData+";mysql.sqlUserName="+this.sqlUserName+";sqlPassWord="+this.sqlPassWord);
}
@Autowired
private IUserDao userDao;
public void getById(Long id){
System.out.println(this.getClass().getName() + ".getById()");
userDao.getById(id);
}
}
导航,上一页,下一页
16Resource和Autowired注解的区别
18使用java config实现Spring Ioc