是Spring啊!

一.概念


  1. spring概念

一个包含了众多工具方法的 IoC 容器

okk~~分析一下这句话意思,众多方法,IoC 是形容词,容器是名词 ->

众多方法:比如一个类里有许多方法, 容器:存储的东西 重点就是IoC是什么?

  1. Ioc

2.1解释

IoC -> Inversion of Control 控制反转 -> 对象的生命周期 -> 控制权: 由程序猿 变为 Spring IoC

简单来说 Java里的对象的创造和销毁都是被程序猿掌控的, 但是IoC的话 就变了, 掌控这些的不是程序猿了,而是Spring

2.2 意义

所以,把对象的生命周期的控制权交出去了,有什么好处?

~解耦合!!!!

每个对象都要程序猿创建,如果1的创建需要2,2的创建需要3..... 那么当代码出现异常,76出现了bug - > 前面的1到75就会都有问题产生 -> 所以这个时候,好处显而易见

~并且,对象的生命周期交给IoC维护, 作为程序猿无需关注

  1. DI

其实IoC只是一个思想, 那么具体的实现其实是 DI

DI -> Dependency Injection 依赖注入

IoC DI 从不同的维度描述了同一件事 比如->我的计划和实际操作(我要学会一门乐器->钢琴十级了现在)


二.创建一个Spring项目

1.复杂的创建

1.1.创建
1.1.1创建一个maven项目
1.1.2添加spring配置文件

spring.xml的代码

<?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>

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
 </dependencies>

1.1.3创建spring对象
1.1.4将对象配置到spring中
1.1.5得到spring对象
1.1.6获取spring对象
1.1.7使用一下

1.2. 注意事项
1.3. ApplicationContext BeanFactory区别

ApplicationContext BeanFactory 区别:

* 相同:

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

* 不相同:

* 1.ApplicationContext 是 BeanFactory 的子类,

* BeanFactory提供了基础访问 Bean的方法

* ApplicationContext 除了拥有 BeanFactory的所有功能外,还提供了更多的方法,对国际化的支持,资源访问支持...

* 2.性能方面

* BeanFactory 按需加载 Bean

* ApplicationContext饿汉模式, 创建的时候所有 Bean都加载了(貌似是智能的,电脑空间够,才行,不够的话,还是按需加载)

2.简单的创建

2.1创建 - 5大类注解
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--                                       所有beans存放的位置-->
    <content:component-scan base-package="beans"></content:component-scan>
</beans>

2.1.2 5大类注解
2.1.2.1 5大类注解

@Controller 控制器 业务逻辑层

@Service 服务 服务层

@Repository 仓库 持久层

@Configuration 配置 配置层

@Component 组件

2.1.2.2 5大类注解的意义

@Configuration -> @Controller 控制器 (前端参数的校验) -> @Service(数据的组装,接口的调用) -> @Repository(和数据库进行交互)

可以让代码可读性提高, 让程序员快速知道当前类的用途

比如 Java里的 @Override 看到就知道被标注的方法重载了父类的方法

2.1.2.3 5大类注解的关系

其他四个类本身是属于 @Component 的“⼦类”--看源码

2.1.3 解释

public static void main(String[] args) {
        String name1 = "user";
        String name2 = "USER";
        System.out.println(Introspector.decapitalize(name1));
        System.out.println(Introspector.decapitalize(name2));
    }

2.2创建-使用方法注解@Bean
2.2.1使用方法注解@Bean

2.2.2 重命名 Bean

设置 name 属性给 Bean 对象进⾏重命名

2.2.3 注意事项

* Bean 的命名规则 :

* 当没有设置 name属性时, 那么 bean的默认名称时方法名

* 通过重命名的 name属性对应值来获取后, 只能用重命名, 不能再用方法名

name={} 可以省略


* Bean 的命名可以起多个名字 :

但是会有问题--同⼀类型多个 @Bean 报错


3 获取(对象装配/注入)

三个方法: 属性/字段注入, 构造方法注入, Setter注入

关键字: @Autowired @Resource

3.1 三种注入区别:
  1. 属性注入写法简单, 但通用性不好,只能IoC容器

  1. Setter注入, 早期Spring推荐版本, 但是通用性不好

  1. 构造方法注入, 通用性好, 且确保使用对象前一定被初始化了

3.2 关键字区别:
  1. A来自于Spring, R来自于JDK注解

  1. 使用参数设置不同, R支持更多的'

  1. R不能用于构造方法注入

3.3 @Bean 将一个类型的对象注入多次的问题

* @Bean 将一个类型的对象注入多次

* 解决方案三个

* 1. 精确的描述 bean的名称

* 2. 使用 @Resource设置 name的方法来重新命名注入对象 @Resource(name="user")

* 3. 使用 @Autowired+ @Qualifier来筛选 bean对象

小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值