Spring更简单的存储方式与获取方式详解

网友投稿 245 2022-07-23


目录存储方式(注解)@Controller@Service@Repository@Configuration@Component方法注解@Bean重命名bean五大注解之间的关系从Spring中获取对象@Autowired注入注解三种注入的优缺点@Resource@Autowired和@Resource的区别总结

存储方式(注解)

使用注解的方式存储业务对象到Spring中会更简单

1.配置spring.xml设置spring存入对象的根路径 ,目的是让Spring项目启动后,能够去根路径下的所有类中扫描并标识为需要存储到Spring中的对象存储到Spring中

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:content="http://springframework.org/schema/context"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd http://springframework.org/schema/context https://springframework.org/schema/context/spring-context.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:content="http://springframework.org/schema/context"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd http://springframework.org/schema/context https://springframework.org/schema/context/spring-context.xsd">

2.使用注解将bean对象存储到spring框架中

注解分类:

1.类注解:@Controller【控制器】,@Service【业务逻辑层】,@Repository【数据持久层】,@Component【组件类】,@Configuration【配置类】

2.方法注解:@Bean(必须配合类注解使用)

@Controller

创建bean对象

package com.bit;

import org.springframework.stereotype.Controller;

/**

* Description:

* User: lmp

* Date: 2022-05-24

* Time: 19:23

*/

@Controller

public class UserController {

public void sayHi(String name){

System.out.println("Hi controller"+name);

}

}

读取bean对象

package com.bit;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

* Description:

* User: lmp

* Date: 2022-05-24

* Time: 15:25

*/

public class App {

public static void main(String[] args) {

//先获取对象的Spring

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

//从 Spring 中获得存入的对象(将存入的类首字母小写,若类名字符大于2个,并且前两个字符都是大写,那么使用原类名作为beankRmDOran的名字)

UserController userController = context.getBean("userController",UserController.class);

userController.sayHi("Bit");

}

}

@Service

和controller一样

@Repository

和controller一样

@Configuration

和controller一样

@Component

和controller一样

方法注解@Bean

一般写在组件里面,方法注解必须配合类注解使用,因为Spring默认是类级别的扫描

package com.bit.util;

import com.bit.Model.User;

import com.sun.org.apache.bcel.internal.generic.RETURN;

import org.springframework.context.annotation.Bean;

import org.springframework.stereotype.Component;

/**

* Description:

* User: lmp

* Date: 2022-05-24

* Time: 21:14

*/

@Component

public class UserBean {

@Bean //将当前对象存储在Spring当中

public User user1(){

User user = new User();

user.setId(1);

user.setName("zhanghttp://san");

user.setAge(18);

return user;

}

}

重命名bean

可以通过设置name属性给Bean对象进行重命名操作

@Bean重命名可以有多个别名,但是当指定别名之后,方法名就取不到对象了

package com.bit.util;

import com.bit.Model.User;

import com.sun.org.apache.bcel.internal.generic.RETURN;

import org.springframework.context.annotation.Bean;

import org.springframework.stereotype.Component;

/**

* Description:

* User: lmp

* Date: 2022-05-24

* Time: 21:14

*/

@Component

public class UserBean {

@Bean(name = {"u1","userInfo1"}) //将当前对象存储在Spring当中

public User user1(){

User user = new User();

user.setId(1);

user.setName("zhangsan");

user.setAge(18);

return user;

}

@Bean(name = "u2") //将当前对象存储在Spring当中

public User user2(){

User user = new User();

user.setId(1);

user.setName("lisi");

user.setAge(18);

return user;

}

}

五大注解之间的关系

从业务逻辑来说,@Controller是@Component的子类,同样,@Service,@Repository,@Configuration都是@Component的子类

从Spring中获取对象

@Autowired

属性注入(属性注册)

Setter注入

构造方法注入

注入注解

@Qualifier 可以解决同一个类有两个以上的对象的情况,可以使用这个注解,它相当于@Resource(name=“”)

三种注入的优缺点

属性注入的优点是简洁,只适用于IoC容器,如果非IOC容器不可用,会报空指针异常构造方法注入是Spring推荐的注入方式,缺点是如果有多个注入会显得比较臃肿Setter方式是Spring前期版本推荐的注入方式,但通用性不如构造方法,

@Resource

对象注入的另一种方式:使用@Resource注解,但Resource注解不能使用在构造方法上

@Autowired和@Resource的区别

1.出身不同,他们所属的包不一样,Resource属于javajdk中的javax包中,而Autowired属于springframework包中的

2.作用范围不同,Resource不可以使用在构造方法注解上,而autowired可以

3.功能不同 Resource可以使用name属性,从而完成对象的别名注入,而autowired没有。

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java内部类与匿名内部类
下一篇:SpringBoot搭建Dubbo项目实现斐波那契第n项详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~