4-Spring使用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1.存储Bean对象到Spring容器中

1.1.创建Bean

1.2.将Bean注册到Spring容器中

1.2.1.第一次存储Bean可选如果是第二次及以后此步骤忽略

1.2.2.添加Bean标签

2.从Spring容器中获取并使用Bean对象

2.1.创建Spring上下文

2.1.1.Spring上下文对象可使用ApplicationContext

2.1.2.Spring上下文对象也可使用BeanFactory

2.1.3.常见面试题ApplicationContext VS BeanFactory

2.2.从Spring上下文对象中获取指定的Bean对象

2.2.1.根据id获取bean

2.2.2.根据类型获取bean

 2.2.3.根据id+类型获取bean推荐使用

2.3.使用Bean对象非必须

3.总结


1.存储Bean对象到Spring容器中

1.1.创建Bean

1.2.将Bean注册到Spring容器中

1.2.1.第一次存储Bean可选如果是第二次及以后此步骤忽略

需要自己先在创建好的项目中添加Spring配置文件spring-config.xml(命名尽量要符合语义)将此文件放到resources存放资源文件的根目录下。

(xml语言是做数据信息描述的语言)

Spring配置文件的格式是固定不变的无需记忆自行保存即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

1.2.2.添加Bean标签

将User对象注册到Spring中具体操作是在<beans>中添加如下配置

<beans>
   <bean id="user" class="beans.User"></bean>
</beans>

其中

  • id给bean起个名字尽量符合语义一会用的时候就用这个且多个bean的id不重复。
  • class要注册的对象的完整路径(包名+类名)。
  • 并不是当程序执行到这行代码时就把bean注册到Spring中了而是当用的时候才会启动。
  • Spring中用的是懒加载懒汉模式SpringBoot中加注解属于饿汉模式。

2.从Spring容器中获取并使用Bean对象

如果取多个Bean的话重复2.2.和2.3.步骤

2.1.创建Spring上下文

得到Spring上下文对象因为对象都交给Spring管理了所以获取对象要从Spring中获取那么就得先得到Spring的上下文。

2.1.1.Spring上下文对象可使用ApplicationContext

//1.得到Spring的上下文对象创建的时候需要配置Spring配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
ClassPathXmlApplicationContext 属于 ApplicationContext 的子类拥有 ApplicationContext 的所有功能是通过 xml 的配置来获取所有的 Bean 容器。

 一定要对应一致否则会报错。

2.1.2.Spring上下文对象也可使用BeanFactory

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

XmlBeanFactory()这个方法从Spring3.1后就过时了可以采用上面的其他新方法来写但写法复杂。

2.1.3.常见面试题ApplicationContext VS BeanFactory

Spring容器有两个顶级的接口ApplicationContext和BeanFactory二者效果是一样的区别如下

①从继承关系和功能方面来说

BeanFactory是ApplicationContext的父类。

BeanFactory只是提供了基础操作bean的方法ApplicationContext除了继承BeanFactory的所有功能之外还提供了自己独有的功能比如国际化支持资源访问支持以及事件传播等方面的支持。

②从性能方面来说

子ApplicationContext是一次性加载并初始化所有bean在创建对象的时候就会将所有的bean进行创建并初始化。用户体验上更好已经经历过加载初始化的过程以后会快

优点第一次使用bean的时候比较快

缺点启动的时候比较慢可能会造成资源的浪费。

父BeanFactory是需要哪个bean才去加载哪个bean。传统习惯节俭

优点是懒汉模式不浪费任何资源

缺点第一次加载bean比较慢。

2.2.从Spring上下文对象中获取指定的Bean对象

getBean()方法有很多种重载方法

2.2.1.根据id获取bean

//2.从Spring中得到bean对象
User user = (User) context.getBean("user");

context就是Spring对象的化身。

context.getBean("user")返回的是Object此时需要强转为User。

缺点如果是null强转的话会报错。

另外注意spring-config.xml中bean的id一定要和context.getBean中bean的id保持一致

2.2.2.根据类型获取bean

User user = context.getBean(User.class);

优点写法简单

缺点如果Spring中一个类型存在多个实例不知道到底去拿哪个那么程序就会报错NoUniqueBeanDefinitionException(非唯一的bean异常)。

 

 2.2.3.根据id+类型获取bean推荐使用

User user = context.getBean("user", User.class);

此种写法通常是使用频率比较高的推荐用法安全。

2.3.使用Bean对象非必须

//3.调用相应的方法
user.sayHi("Java");

 

若程序报错一定要自己去看报错日志解决方案主要有

  • 检查相关拼写是否正确
  • 检查两个对应是否一致
  • 检查生成的target文件夹下是否生成配置文件若有缓存问题删除target重新运行重新生成target。

3.总结

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring