前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用注解进行 Spring 开发

利用注解进行 Spring 开发

作者头像
村雨遥
发布2020-08-18 16:14:49
3090
发布2020-08-18 16:14:49
举报
文章被收录于专栏:JavaParkJavaPark

目录

  • 1. Bean 注入
  • 2. 属性注入
  • 3. 基于 Java 类配置

1. Bean 注入

之前的学习中都是利用 XML 配置中的 bean 标签来进行 Bean 的注入,现在来学习一下如何利用注解实现 Bean 注入。

  1. 首先需要在 Spring 的配置文件(一般是 applicationContext.xml)中配置需要扫描的注解
代码语言:javascript
复制
<context:component-scan base-package="com.cunyu.pojo"/>
  1. 然后在要扫描的包中编写实体类,同时加上注解
代码语言:javascript
复制
package com.cunyu.pojo;

import org.springframework.stereotype.Component;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : User
 * @date : 2020/7/18 10:21
 * @description : TODO
 */

// 相当于 XML 配置文件中的 <bean id="user" class="com.cunyu.pojo.User"/>
@Component("user")
public class User {

    private String name;

    public User() {
        name = "村雨遥";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 进行单元测试
代码语言:javascript
复制
package com.cunyu.pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : UserTest
 * @date : 2020/7/18 10:22
 * @description : TODO
 */

public class UserTest {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) applicationContext.getBean("user");
        System.out.println(user.getName());
    }
}

@Component 在不同的层又可以衍生出其他三个注解,其功能和 @Component 一样,只是为了更好地分层。

  1. @Controller:一般用在 Web 层,前端访问控制器
  2. @Service:一般用在 Service 层,数据服务层,业务代码
  3. @Repository:一般用在 Dao 层,数据访问成

2. 属性注入

要实现属性的注入,可以用 @Value 注解,此时不需要提供 set 方法即可实现;

  1. 同 Bean 注入,配置需要扫描的包
  2. 给属性添加注解
代码语言:javascript
复制
package com.cunyu.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : User
 * @date : 2020/7/18 10:21
 * @description : TODO
 */

@Component("user")
public class User {

    // 相当于 XML 配置中的 <property name="name" value="村雨遥"/>
    @Value("村雨遥")
    private String name;


    public String getName() {
        return name;
    }

}
  1. 单元测试同 Bean 注入

注意: 属性注入可以不提供 set 方法,但如果提供了 set 方法,也是可以的,此时相当于给该属性提供默认值;

代码语言:javascript
复制
package com.cunyu.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : User
 * @date : 2020/7/18 10:21
 * @description : TODO
 */

@Component("user")
public class User {


    private String name;

    public String getName() {
        return name;
    }

    @Value("村雨遥")
    public void setName(String name) {
        this.name = name;
    }
}

此时可以通过 set 方法进行属性值的设置;

代码语言:javascript
复制
package com.cunyu.pojo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : UserTest
 * @date : 2020/7/18 10:22
 * @description : TODO
 */

public class UserTest {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) applicationContext.getBean("user");
        // 输出默认值 "村雨遥"
        System.out.println(user.getName());

        user.setName("小鱼");
        // 输出设置后的值 "小鱼"
        System.out.println(user.getName());
    }
}

3. 基于 Java 类配置

前面已经介绍了基于 XML 的配置和基于注解的配置,现在来了解下基于 Java 类配置。

  1. 首先准备一个实体类
代码语言:javascript
复制
package com.cunyu.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : User
 * @date : 2020/7/18 10:21
 * @description : TODO
 */

@Component
public class User {

    private String name;

    public String getName() {
        return name;
    }

    @Value("村雨遥")
    public void setName(String name) {
        this.name = name;
    }
}

  1. 编写配置类
代码语言:javascript
复制
package com.cunyu.config;

import com.cunyu.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : UserConfig
 * @date : 2020/7/18 11:14
 * @description : TODO
 */

// 表明该类是一个配置类
@Configuration
public class UserConfig {
    // 通过方法来注册一个 Bean,方法名对应 bean 标签中的 id,方法返回值对应 Bean 的类型
    @Bean
    public User user() {
        return new User();
    }
}
  1. 单元测试
代码语言:javascript
复制
package com.cunyu.pojo;

import com.cunyu.config.UserConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author : cunyu
 * @version : 1.0
 * @className : UserTest
 * @date : 2020/7/18 10:22
 * @description : TODO
 */

public class UserTest {
    @Test
    public void test() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(UserConfig.class);
        User user = (User) applicationContext.getBean("user");
        System.out.println(user.getName());
        user.setName("小雨");
        System.out.println(user.getName());
    }
}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 村雨遥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1. Bean 注入
  • 2. 属性注入
  • 3. 基于 Java 类配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档