JavaEE——Spring中存取Bean的注解

这篇具有很好参考价值的文章主要介绍了JavaEE——Spring中存取Bean的注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、存储Bean对象

1、定义

2、存储方式

(1)、类注解

【1】、@Controller(控制器存储)

【2】、@Service(服务存储)

【3】、@Repository(仓库存储)

【4】、@Component(组件存储)

【5】、@Configuration(配置存储)

(2)、方法注解@Bean

3、重命名Bean

二、获取Bean对象

1、注入关键字@Autowired

(1)、属性注入

(2)、Setter注入

(3)、构造方法注入

2、注入关键字@Resource

3、@Autowired和@Resource的区别

4、解决同一类型多个@Bean报错

(1)、使用 @Resource 注解

(2)、使用 @Qualifier 注解


一、存储Bean对象

1、定义

  • @Controller:业务逻辑层;
  • @Service:服务层;
  • @Repository:持久层;
  • @Configuration:配置层;

JavaEE——Spring中存取Bean的注解,JavaEE,spring,java

注:@Controller、@Service、@Repository、@Configuration等注解都是属于@Component的"子类"。

2、存储方式

(1)、类注解

【1】、@Controller(控制器存储)
@Controller
public class UserController {
    public void func1() {
        System.out.println("func1");
    }
}
public class App {
    public static void main(String[] args) {
       ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
       UserController userController=context.getBean("userController",UserController.class);
       userController.func1();
    }
}
【2】、@Service(服务存储)
@Service
public class UserService {
    public void func2() {
        System.out.println("func2");
    }
}
class App {
    public static void main(String[] args) {
        ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService =context.getBean("userService",UserService.class);
        userService.func2();
    }
}
【3】、@Repository(仓库存储)
@Repository
public class UserRepository {
    public void func3() {
        System.out.println("func3");
    }
}
class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        UserRepository userRepository =context.getBean("userRepository",UserRepository.class);
        userRepository.func3();
    }
}
【4】、@Component(组件存储)
@Component
public class UserComponent {
    public void func4() {
        System.out.println("func4");
    }
}
class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        UserComponent userComponent =context.getBean("userComponent",UserComponent.class);
        userComponent.func4();
    }
}
【5】、@Configuration(配置存储)
@Configuration
public class UserConfiguration {
    public void func5() {
        System.out.println("func5");
    }
}
class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        UserConfiguration userConfiguration=context.getBean("userConfiguration",UserConfiguration.class);
        userConfiguration.func5();
    }
}

(2)、方法注解@Bean

在Spring框架的设计中,方法注解@Bean要配合类注解才能将对象正常的存储到Spring容器中。

@Component
public class Users {
    @Bean
    public User user1() {
        User user = new User();
        user.setName("张三");
        return user;
    }
}

3、重命名Bean

可以通过设置name属性给Bean对象进行重命名操作,此时我们使用user1就可以获取到User对象。

@Component
public class Users {
    @Bean(name = "user1")
        public User user() {
            User user = new User();
            user.setName("张三");
            return user;
    }
}

这个重命名的name是⼀个数组,因此一个bean可以有多个名字,并且name={}也可以省略。

@Bean({"user1", "user2"})
public User user() {
    User user = new User();
    user.setName("张三");
    return user;
}

二、获取Bean对象

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。
对象装配(对象注⼊)的实现⽅法以下 3 种:属性注⼊、Setter 注⼊、构造⽅法注⼊

1、注入关键字@Autowired

(1)、属性注入

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
    @Autowired
    private UserService userService;

    public void show() {
        System.out.println(userService.name)
    }
}
  • 优点:使用简洁方便
  • 缺点:只能用于 IoC 容器,非 IoC 容器不可用;无法注入被 final 修饰的对象;容易违背单一性原则

(2)、Setter注入

Setter注入和属性的Setter方法类似,但在设置set方法时需要加上@Autowired的注解。

@Controller
public class UserController {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void show() {
        System.out.println(userService.name)
    }
}
  • 优点:不容易违背单一性原则
  • 缺点:通用性不如构造方法;无法注入被final修饰的对象;容易被非法调用

(3)、构造方法注入

构造方法注入是在类的构造方法中实现注入的。如果只有一个构造方法,那么@Autowired注解可以省略,但如果类中有多个构造方法,那么需要添加上@Autowired来明确指定到底使用哪个构造方法,否则程序会报错。

@Controller
public class UserController {
    private UserService userService;
    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    public void show() {
        System.out.println(userService.name)
    }
}
  • 优点:构造器是Spring推荐的注入方式,同时构造器注入的通用性较强,能够注入被final修饰的对象
  • 缺点:使用复杂

2、注入关键字@Resource

在进行类注入时除了可以使用@Autowired关键字之外,还可以使用@Resource进行注入。

@Controller
public class UserController {
    @Resource
    private UserService userService;

    public void show() {
        System.out.println(userService.name)
    }
}

3、@Autowired和@Resource的区别

  • 出身不同:@Autowired 来自于Spring;@Resource 来自于JDK的注解;
  • 设置参数不同:相比于@Autowired,@Resource支持更多的参数设置;
  • 注入种类不同:@Autowired可用于属性注入、Setter注入和构造函数注入;@Resource只能用于属性注入和Setter注入,不能与于构造函数注入;

4、解决同一类型多个@Bean报错

@Component
public class Users {
    @Bean
    public User user1() {
        User user = new User();
        user.setName("张三");
        return user;
    }
    @Bean
    public User user2() {
        User user = new User();
        user.setName("李四");
        return user;
    }
}

报错的原因是非唯一的Bean对象,解决同一个类型的多个bean的解决方案有以下两个文章来源地址https://www.toymoban.com/news/detail-603597.html

(1)、使用 @Resource 注解

@Controller
class UserController4 {
    @Resource(name = "user1")
    private User user;
    public User getUser() {
        return user;
    }
}

(2)、使用 @Qualifier 注解

@Controller
public class UserController5 {
    @Autowired
    @Qualifier(value = "user2")
    private User user;
    public User getUser() {
        return user;
    }
}

到了这里,关于JavaEE——Spring中存取Bean的注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring】-Spring中Bean对象的存取

    作者 :学Java的冬瓜 博客主页 :☀冬瓜的主页🌙 专栏 :【Framework】 主要内容 :往spring中存储Bean对象的三大方式:XML方式(Bean标签);五大类注解;方法注解。从spring中取对象的两种方式:基本方法、注解方法(属性注入、set注入、构造方法注入)。 在Spring中,Bean的装配方式

    2024年02月12日
    浏览(21)
  • Spring 用注解更简单存取对象

    ​ 上一篇文章是最原始的创建使用,这篇主要是讲 Spring 更简单的存储和读取对象的核心是使用 注解 ,也是日常生活企业用的最多的方法 “注解” 所以这篇的内容是很重要的 !!! 1.1 前置工作 ​ 需要再 Spring 的配置文件中设置组件 Component 的根路径 这是很重要的一步,在

    2024年02月13日
    浏览(26)
  • 【Spring】基于注解方式存取JavaBean:Spring有几种注入方式?有什么区别?

     Hello,我是小黄。众所周知,Spring是一个开源的Java应用程序框架,其中包括许多通过注解实现依赖注入的功能。Spring提供了多种注入方式,可以满足不同的需求和场景。常见的注入方式包括构造函数注入、Setter方法注入和属性注入。不同的注入方式有不同的适用场景和优缺

    2024年02月11日
    浏览(33)
  • Spring 更简单的读取和存储对象、使用注解存取对象

    我们知道物件都会随着时代的发展,越变越简单的。Spring 框架也不意外;我们在之前存储Bean对象是在配置文件中添加 bean/bean 来存入Bean对象到Spring当中的,使用那个类对象就要存入那个,一个两个类对象还好,如果需要的对象多了,就会非常麻烦。现在,随着 Spring 发展不用

    2024年02月11日
    浏览(36)
  • javaee spring配置文件bean标签详解

    bean标签中添加scope属性,设置bean对应对象生成规则. scope = “singleton” 单例,默认值,适用于实际开发中的绝大部分情况. scope=“prototype” 多例,适用于struts2中的action配置 注意: 只对单例有效,设置scope=\\\"singleton\\\"时测试 延时创建属性. lazy-init=“false” 默认值,不延迟创建,即在启动时

    2024年02月11日
    浏览(43)
  • 更简单的存取Bean的方式(一)-五大类注解

      目录 使用类注解 前置工作  Bean命名规则  五大类的实现 JavaEE标准分层 之前我们存储Bean时,是在spring-config.xml文件中添加bean注册内容来实现的 通过\\\"注解\\\"我们可以替代这一项工作 更加简单的存储方式: 五大类注解: @Controller(控制器):用来控制前端提交的请求,验证用户请求的

    2023年04月25日
    浏览(22)
  • spring-注解开发bean

    使用@Component定义bean 在配置文件中通过组建扫描加载bean 3.也可以通过不要配置文件,定义类,使用@Configuration,来代替配置文件 基于注解定义bean 1.@component,大部分的bean都可以通过这个来定义 1.1@Controller,控制层 1.2@Service,服务层 1.3@Repository,数据层 2.对于纯注解的开发,还

    2024年02月13日
    浏览(31)
  • Spring使用注解管理Bean

    引入lib包 Spring对Bean管理的常用注解 @Component组件(作用在类上) Spring中提供了@Component的三个衍生注解:(功能在目前为止是一致的) @Controller WEB层 @Service 业务层 @Repository 持久层 属性注入的注解:(使用注解注入的方式,可以不用提供set方法) @Value  用于注入普通类型 @Autowired  自动装

    2024年01月17日
    浏览(31)
  • Spring基于注解管理bean及全注解开发

    Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。 Spring自诞生以来备受青睐,

    2024年02月14日
    浏览(30)
  • 【Spring】(三)Spring 使用注解存储和读取 Bean对象

    前面的文章详细的介绍了 Spring 对象的创建,以及对 Bean 对象的存取操作,但是通过配置文件注册 Bean 对象以及使用 ApplicationContext 或 BeanFactory 的方式获取 Bean 对象的操作就显得格外的复杂。因此,本文主要就是详细介绍了一种更加简单的方式来实现对 Bean 对象更加简单的储

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包