# 使用注解方式实现Spring IoC

回到spring导航页

# 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);
    }
}

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

# @Value用法示例代码

在resources目录下新建config.properties文件,内容如下:

metaData=com.torey
mysql.username=root
mysql.password=root123
1
2
3

在applicationContext.xml文件新增一句

<!--通知spring ioc容器初始化时加载属性文件-->
    <context:property-placeholder location="classpath:config.properties"/>
1
2

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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

在java代码中使用@Value获取config.properties中配置信息

@Value("${metaData}")//读取config.yml的metaData属性值
    private String metaData;
    @Value("${mysql.username}")
    private String sqlUserName;
    @Value("${mysql.password}")
    private String sqlPassWord;
1
2
3
4
5
6

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);
    }
}

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
38
39
40
41
42
43
44
45
46

# 导航,上一页,下一页

16Resource和Autowired注解的区别
18使用java config实现Spring Ioc

# 支持我-微信扫一扫-加入微信公众号

Aseven公众号

# 赞赏作者

赞赏作者