Spring中简单的获取Bean对象(对象装配)

获取Bean对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注入!

对象装配(对象注入)更加简单的读取Bean(是从Spring容器中读取某个对象放到当前类里面)的实现方法有以下3种:

  1. 属性注入:最简单,日常工作见的最多的
  2. 构造方法注入
  3. Setter注入

使用这三种方法,就可以更加简单的读取Bean(从容器中读取某个对象,放到当前类里面)

  1. 属性注入:
    @RestController
    class UserController {
        //属性注入
        @Autowired //自动注入对象(更加简单的从Spring容器中获取到对象
        private UserService userService;
        
        @RequestWrapper("/add")
        public UserInfo add(String username,String password){
            return userService.add(username,password);
        }
    }
    

    优点分析:

    属性注入最大的优点就是实现简单、使用简单,只需要给变量上添加一个注解(@Autowired),就可以在不 new 对象的情况下,直接获得注入的对象了(这就是 DI 的功能和魅力所在),所以它的优点就是使用简单。

    缺点分析:

    有的编辑器idea都会提醒你:”不建议使用此方法注入“

    属性注入的缺点主要包含以下3个:

    1.功能性问题:无法注入一个不可变的对象(final修饰的对象)

    2.通用性问题:只能适用于Ioc容器

    3.设计原则问题:更容易违背单一设计原则

  2. Setter注入
    @RestController
    class UserController {
        
        //Setter注入
        private UserService userService;
        
        @Autowired  //Setter方法+ @Autowired注解
        public void setUserService(UserService userService){
            this.userService=userService;
        }
    
        @RequestWrapper("/add")
        public UserInfo add(String username,String password){
            return userService.add(username,password);
        }
    }

    优点分析:

    完全符合单一职责的设计原则,因为每一个 Setter 只针对一个对象

    缺点分析:

    1.不能注入不可变对象(fianl修饰的对象)

    2.注入的对象可被修改

@Resource:另一种注入关键字

在进行类注入的时候,可以使用@Autowried关键字之外,我们还可以使用@Resource进行注入

@Controller
class UserController {
    //注入
    @Resource
    private UserService userService;

    public User getUser(Integer id) {
        return userService.getUser(id);
    }
}

那么,我们来看一下@Autowired和@Resource的区别吧!!

  1. 出身不同

    @Autowired来自于Spring

    @Resource来自于JDK的注解

  2. 使用时设置的参数不同

    相比于@Autowired来说,@Resource支持更多的参数设置

    列如:name,根据名称获取Bean

  3. @Autowired可以用于Setter注入,构造函数注入和属性注入,而@Resource只能用于Setter注入和属性注入,不能适用于构造函数注入
  4. @Autowired先根据类型查找(byType),之后再根据名称查找(byName);@Resource先根据名称查找,然后再根据类型查找

在Spring(容器)中找Bean有两种方式:

  1. 根据类型查找
  2. 根据名称查找

综合练习:

在 Spring 项⽬中,通过 main ⽅法获取到 Controller 类,调⽤ Controller ⾥⾯通过注⼊的⽅式调⽤ Service 类,Service 再通过注⼊的⽅式获取到 Repository 类,Repository 类⾥⾯有⼀个⽅法构建⼀ 个 User 对象,返回给 main ⽅法。Repository ⽆需连接数据库,使⽤伪代码即可。


总结:

  1.  将对象存储到 Spring 中:

    a. 使⽤类注解:@Controller、@Service、@Repository、@Configuration、@Component【它 们之间的关系】

    b. 使⽤⽅法注解:@Bean【注意事项:必须配合类注解⼀起使⽤】

  2. Bean 的命名规则:

    ⾸字⺟和第⼆个字⺟都⾮⼤写,⾸字⺟⼩写来获取 Bean,如果⾸字⺟和第⼆个 字⺟都是⼤写,那么直接使⽤原 Bean 名来获取 Bean

  3.  从 Spring 中获取对象:

    a. 属性注⼊

    b. Setter 注⼊

    c. 构造函数注⼊(推荐)

  4. 注⼊的关键字有:

    a. @Autowired

    b. @Resource

  5. @Autowired 和 @Resource 区别:

    出身不同; 使⽤时设置参数不同 @Resource ⽀持更多的参 数,⽐如 name。

  6. 解决同⼀类型多个 Bean 的报错:

    a. 使⽤ @Resource(name="")

    b. 使⽤ @Qualifier("")

    Spring中简单的获取Bean对象(对象装配)_第1张图片

你可能感兴趣的:(java要笑着学,操作系统哪些事?,spring,java,后端)