您现在的位置是:首页 >技术教程 >Spring的创建和使用,存储和读取Bean总结网站首页技术教程

Spring的创建和使用,存储和读取Bean总结

白杨783 2024-06-17 10:29:51
简介Spring的创建和使用,存储和读取Bean总结

目录

Spring项目创建和使用流程

1.创建一个 Spring 项目

 2.存储 Bean

3.读取 Bean

ApplicationContext和BeanFactory的区别

通过注解存储 Bean对象

五大类注解的关系

Java程序标准分层

方法注解@Bean

注入Bean对象的三种方式

1.属性注入

2.Setter注入

3.构造方法注入

Autowried 和 Resource


Spring项目创建和使用流程

1.创建一个 Spring 项目

   1.1.创建一个 maven 项目
   1.2.添加 spring-context 依赖
   1.3.在resources目录中创建一个 spring-config.xml 的配置文件
   1.4.创建一个启动类(为后面从 spring 容器中获取 bean 做准备)

 2.存储 Bean

  2.1先创建 Bean 对象
  2.2配置文件的方式<bean></bean>
       a.通过 spring 配置文件(spring-config.xml)<bean id = "bean名称" class = "包名+类名"></bean>
  2.3通过注解的方式
   a.配置扫描路径,只有扫描路径下的包才有可能将Bean存储到 Spring 容器中
   b.在扫描路径的类中加五大类注解 或@Bean 方法注解

3.读取 Bean

在启动类中读取Bean(含有main方法)
     3.1.得到 Spring 对象(通过ApplicationContext或者BeanFactory接口 创建一个 ClassPathXmlApplicationContext/ClassPathResouece对象,把配置文件名(spring-config.xml)通过字符串的方式传入到这个对象中
     3.2配置文件的方式:通过 Spring 对象 getBean方法传入在配置文件设置的id和类名 获取到 Bean 对象(DI)
    3.3:五大类注解的方式:通过Spring对象,getBean方法传入类名的小驼峰形式(如果类名的第一个字母和第二个字母都是大小,此时类名保持不变,不必写成小驼峰形式)和类名
    3.4:@Bean的方式:通过 Spring 对象 getBean方法传入该@Bean存储对象的名称(方法名),和该方发返回值的类型

在普通类中读取:属性注入,方法注入,构造方法注入

ApplicationContext和BeanFactory的区别

ApplicationContext是BeanFactory的子类,除了继承BeanFactory的所有功能外,还拥有自己的特性
AplicationContext会将 spring-config.xml中所有的对象存储到 spring容器 中.比较费内存,一次性加载,之后的读取会非常快
BeanFactory,类似于懒加载,只有调用 getBean 才会加载对应的 Bean.比较节省内存,调用时才会加载初始化 bean 到 spring容器 中,效率不高

通过注解存储 Bean对象

1.使用五大类注解
2.使用方法注解@Bean

@Controller 
控制器,直接和用户打交道,验证用户请求数据的正确性 

@Service
服务:编排和调度具体执行方法

@Respository
持久层:和数据库交互

@Component
组件:工具类     

@Configurartion
配置项:项目中的一些配置

使用注解存储 Bean 对象
1.在配置文件spring-config.xml中,配置存储对象所在包的路径,只有被配置的包下的所有类,添加了注解才能被识别保存到 Spring 容器中

使用注解获取 Bean 对象

同样需要得到一个Spring对象(ApplicationContext或者BeanFactory),通过Spring对象,getBean方法传入类名的小驼峰形式(如果类名的第一个字母和第二个字母都是大小,此时类名保持不变,不必写成小驼峰形式)和类名

五大类注解的关系

Java程序标准分层

 五大类注解在都是基于Component实现的,继承于Component,它们在功能上没有多大区别,五大类注解是根据上述分层需求来划分的,使用五大类注解的目的是为了让程序员看到注解后,直接看出当前类的用途.

方法注解@Bean

类注解是添加到某个类上,而方法注解是放到某个方法上的

@Bean 的命名规则默认情况下是 @Bean 存储对象的名称 = 方法名

@Bean 注解必须配合五大类注解一起使用

重命名:@Bean(name/value = "重命名"),重命名后,默认的使用方法名获取存储对象名称的方法就不行了

如果是Bean注解 ,想要获取到Bean 就需要通过 Spring 对象 getBean方法传入该@Bean存储对象的名称,和该方发返回值的类型

注入Bean对象的三种方式

1.属性注入

使用Autowired注解

    @Autowired
    private User user;

优点:简单

缺点:1.没办法实现 final 修饰的变量注入(final修饰的对象,要么直接赋值,要么在构造方法中赋值)
2.只适用于IoC容器,兼容性低 3.因为写法简单,违背单一设计原则的概率更大

2.Setter注入

private User user;
    @Autowired
    public void User(User user){
        this.user = user;
    }

优点:符合单一设计原则
缺点:1.不能注入 final 修饰的对象(final修饰的对象,要么直接赋值,要么在构造方法中赋值)
2.注入的对象可被修改

3.构造方法注入

   private User user;
    @Autowired
    public Test(User user){
        this.user = user;
    }

优点:
1.可以注入一个不可变的对象(final修饰的对象,要么直接赋值,要么在构造方法中赋值.)
2.注入的对象不会改变(构造方法只能执行一次)
3.构造方法注入可以保证注入对象完全被初始化
4.构造方法的兼容性更好(构造方法注入可以脱离IoC容器)

Autowried 和 Resource

Autowried来自于Spring. Resource来自于JDK
Resource注解不能构造方法注入
Resource支持更多的参数设置
Autiwried先根据类型查找,之后再根据名称查找.Resource先根据名称查找,再根据类型查找

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。