文章目录

  • 1.Spring的创建
  • 2.Spring对象的存储
  • 3.将 Bean 对象通过配置文件注册到 Spring 当中
  • 4.从 Spring 中将 bean 对象读取出来并使用
    • 4.1 先得到 Spring 上下文对象
    • 4.2 再通过上下文对象提供的方法获取需要使用的baen对象
    • 4.3 使用bean对象[可选步骤]
    • 4.4 获取 getBean 的更多方法
  • 5.ApplicatonContext VS BeanFactory
  • 6.总结
  • 7. 更简单的读取存储Bean(使用注解)
    • 7.1 前置工作(配置扫描路径)
  • 8. 使用类注解和方法注解
    • 8.1 使用五大类注解
    • 8.2为什么需要五大注解以及其中的关系
    • 8.3 使用方法注解 @Bean
      • 8.4 配合 方法注解配合类注解使用
    • 8.5 重命名 Bean
  • 9. 对象注入(对象装配)
    • 9.2 属性注入和构造方法注入以及 Setter 注入的区别
    • 另一种注入注解 @Resource
  • 10.@Resource vs @Autowired

1.Spring的创建

  1. 先创建一个 maven 项目

  2. 添加 Spring 框架支持(Spring-context/Spring-beans)
    配置 pom.xml

                    org.springframework            spring-context            5.2.3.RELEASE                             org.springframework            spring-beans            5.2.3.RELEASE            

配置 spring-config.xml

添加如下代码

    
  1. 创建一个启动类并添加 main

2.Spring对象的存储

存储 Bean 分为一下3步:

  1. 存储 Bean 之前,先创建 Bean

  2. 配置文件 Spring-confing.xml

  3. 将创建的 Bean 注册到 Spring 容器中

3.将 Bean 对象通过配置文件注册到 Spring 当中

id 可以不同于 class 里面的类名的,但是要尽量符合规范

4.从 Spring 中将 bean 对象读取出来并使用

4.1 先得到 Spring 上下文对象

4.2 再通过上下文对象提供的方法获取需要使用的baen对象

4.3 使用bean对象[可选步骤]

4.4 获取 getBean 的更多方法

5.ApplicatonContext VS BeanFactory


相同点:

都可以实现从容器中获取 Bean,都提供了 getBean 的方法

不同点:

  1. ApplicationContext 属于 BeanFactory 的子类BeanFacotory 只提供了 基础访问 Bean 的方法而 ApplicationContext 除了拥有 BeanFactory 的所有功能之外,还提供了更多的方法实现,比如对国际化的支持,资源访问的支持,以及事件和传播等方面的支持
  2. 从性能来说 二者是不同的,BeanFactory 是按需加载 Bean的,而 ApplicationContext 是饿汉方式,在创建时会将所有的 Bean 都加载起来,以为以后使用

6.总结

7. 更简单的读取存储Bean(使用注解)

7.1 前置工作(配置扫描路径)

在配置文件中配置扫描路径

8. 使用类注解和方法注解

  1. 类注解:@Controller[控制器] ,@Service[服务], @Repository[仓库 ],@Configuration[配置] ,@Component[组件]
  2. 方法注解:@Bean

8.1 使用五大类注解

@Controller[控制器]


@Service[服务]


@Repository[仓库]

@Configuration[配置]

@Component[组件]

注意:当我们使用 bean 和 类型 获取 bean 时,bean的名字 要用小驼峰

8.2为什么需要五大注解以及其中的关系

目的:让代码可读性提高,能直观的判断当前类的用途

8.3 使用方法注解 @Bean

8.4 配合 方法注解配合类注解使用

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

  1. 创建一个 Bean

  2. 创建一个 User 对象

  1. 在启动类当中获取 User 对象

tips:这里 获取 Bean 的方式,Bean 的名称 只能是方法名

public class App {    public static void main(String[] args) {       //1. 先得到上下文对象        ApplicationContext context =                new ClassPathXmlApplicationContext("spring-config.xml");         User user = context.getBean("user1",User.class);        System.out.println(user);    }}

8.5 重命名 Bean

@Bean 命名规则

当没有设置 name 属性时,那么 Bean 默认的名称是方法名当设置了 name 属性之后,只能通过重命名的 name 属性对应的值来获取,也就是说重命名之后,再使用方法名就获取不到 Bean 对象
当 UserBean 类中有多个对象时,可以通过设置 name 属性给 Bean 对象进行重命名操作,如下代码:

通过使用 Bean 里面的 name 就可以获取到对象



9. 对象注入(对象装配)

前面我们讲的 五大类注解和方法注解都是将 对象存储到 Spirng 当中,而对象的注入(对象的装配)是把对象从 Spring 当中 取出来

对象注入,我们提供了三种注入的方式:

  1. 属性 注入(字段注入)
  2. 构造方法 注入
  3. Setter 注入

9.2 属性注入和构造方法注入以及 Setter 注入的区别

属性注入:

写法简单,但是通用性不好,它只能运行在 IoC 容器下,如果是非 IoC 容器就会出现问题

Setter注入:

早期 Spring 版本推荐的写法,Setter 注入的通用性没有构造方法注入通用

构造方法注入:

通用性更好,他能确保在使用注入对象之前,此注入对象一定初始化过了,当构造方法注入参数过多时,此时开发者就要检查自己所写代码是否符合单一设计原则的规范了,此注入方式也是 Spring 后期版本中推荐的注入方式

另一种注入注解 @Resource

注意事项:@Resource 支持属性注入和 Setter 注入,但不支持构造方法注入

10.@Resource vs @Autowired

  1. 出身不同:@Resource 来自于 JDK,@Autowired 是 Spring 框架提供的
  2. 用法不同:@Autowired 支持 属性注入,构造方法注入和Setter 注入,而 @Resource 不支持构造方法注入
  3. 支持的参数不同:@Resource 支持大量参数,不如 name ,type 设置,而 @Autowired 只支持 required 参数设置