Spring IOC

  • 一、spring
    • spring的核心是控制反转(ioc)和面向切面编程(aop),spring是一个分层的一站式轻量级开源框架 ioc讲将我们之前的new的事情交给ioc来管理 aop:jdk的动态代理
    • 优点:
      • 1.方便解耦,简化开发,spring是一个大工厂,将所有对象创建和依赖关系的维护交给spring管理 ioc的作用
      • 2.aop面向切面编程,对程序进行权限拦截、运行监控
      • 3.声明事务的支持,只需要通过配置就可以完成对事务的管理,无需手动编程
      • 4.方便程序的测试,spring对junit4支持,方便注解测试
      • 5.spring不排斥各种优秀的开源框架
      • 6.降低javaEE API的使用难度,提供了封装,是这些API应用难度大大降低
  • 二、IOC
    • 定义:控制反转,将对象的创建权力反转给spring框架 使用ioc解决程序耦合性高的问题 spring工厂读取配置文件 DI是依赖注入,动态的将依赖对象注入到Bean组件中
    • 创建maven的Java项目
      • 建项目 导依赖
      • 编写接口和实现类
        • service放业务层代码 controller放表现层代码 mapper/dao放持久层代码(持久层和数据库交互的接口) domain/entity/pojo放实体类 untils放工具类(比如放逆向工程) resources中放mapper--->.xml文件
        • service-》userservice接口(接口不做实现),在service中还有一个包是impl,在这个包里面实现方法
        • 需要在test中测试impl的方法
          • 这个是面向对象的方式,最原始的方式

          • ioc:实现的两种方式
            • 1.applicationcontext.xml的方式,有xml文件就要有约束 <beans>约束信息,里面支持写spring的配置文件

              • 首先要写想要ioc管理的类 用<bean>写 ,bean就是一个类,bean里面要给的是实现类不是接口

              • 然后在测试类中加载文件.xml文件 classpath是相对路径,现在是spring创建对象,这个时候肯定比new强

            • 2.file的形式,传的时候传全路径(.xml的全路径) 输出结果是一样的只是换了一种加载方式

  • 三、DI依赖注入 就是赋值 实现ioc的技术是DI注入 autowir
    • 赋值的方式1:
      • 注入值在impl中注入值定义变量 生成getter setter方法
      • 然后可以在test中获取对象 获取到值 ref是类注入

    • 赋值的方式2:利用构造器
      • 构造器+index

    • 注入方式3:
      • 构造器+name

    • 注入方式4:集合属性 注意properties:是一个properties的对象是一种文件类型书写格式是key-value 比如log4j.properties不会涉及到对象 map中会涉及到对象 如果aaa涉及到对象 把value换成对象类型,

    • 总结:1.set方法的注入 2.构造器注入(注意构造器有两种方式 index name)
  • 四、多配置文件形式
    • 在src的目录下又多创建了一个配置文件,现在是两个核心的配置文件,加载方式有两种
      • 1.主配置文件中包含其他的配置文件:<import resource="applicationContext2.xml"/>
      • 2.在工厂创建的时候直接加载多个配置文件:

  • 五、spring ioc的注解(半注解)方式 (上一个是配置文件的方式)
    • 一个数据库的表对应一个实体类
    • 全部靠注解实现 依赖没有改变
    • 编写接口和实现类
    • 注解@Compent("us") 在配置文件写bean标签是一个意思 作用:把当前类使用ioc容器进行管理,如果没有指定名称,默认使用类名,首字母小写或者自己指定名称

    • 1.在.xml中加入这一个配置,写最大的包即可

    • 2.在dao层中,@Autowired按照类型注入DI注入实现
    • comonent IOC的注解
  • 六、常用的注解 就是将该类交给spring去管理
    • bean管理的5个注解
      • @Component普通类
      • @controller:表现层
      • @service:业务层
      • @Repository持久层
      • bean配置里面的
    • 依赖注入常用注解
      • @value 用于注入普通类型(string)
      • @Autowired默认按类型进行自动装配(引用类型)

  • 七、纯注解的方式
    • 替换掉所有的配置文件,但是要有配置类
      • 核心不是这个类是在这个类的注解 @Configuration表明这是一个配置类
      • 然后还有扫描指定的包名 configuration
      • 可以导入多个配置类

    • test实现类读取配置文件annotation 里面传的是类名
      • 传的是类名,剩下的一模一样

    • 这里只会new 1次 @Bean一般会用第三方的比如收datasource

### Spring IOC 原理及实现 #### 1. 控制反转(IOC)的概念 控制反转(Inversion of Control,简称 IOC)是一种设计思想,旨在将对象的创建和管理从应用程序代码中分离出来。通过 IOC,开发者无需手动管理对象的生命周期和依赖关系,而是由框架负责这些任务。这种思想使得开发者可以专注于业务逻辑的实现,而不需要关心对象之间的交互细节[^1]。 #### 2. 依赖注入(DI) 依赖注入(Dependency Injection,简称 DI)是实现 IOC 的一种方式。DI 的核心在于通过外部配置或注解的方式,将对象的依赖关系注入到目标对象中,而不是由对象自己负责依赖的创建和管理。依赖注入有三种主要形式:构造器注入、Setter 方法注入和字段注入[^4]。 #### 3. Spring IOC 容器的核心接口 Spring 框架提供了两种主要的 IOC 容器接口: - **BeanFactory**:这是 Spring 框架的基础接口,面向 Spring 内部使用。它负责配置、创建和管理 Bean 的生命周期。 - **ApplicationContext**:这是一个更高级的容器接口,面向开发者使用。它扩展了 BeanFactory 的功能,提供了更多的企业级特性,如国际化支持、事件传播等。在实际开发中,通常使用 ApplicationContext 而非 BeanFactory[^2]。 #### 4. Spring IOC 的实现方式 Spring IOC 的实现主要包括以下几个方面: ##### (1) 元数据解析 Spring 使用 XML 文件、Java 注解或 Java 配置类来定义 Bean 的元数据。例如,通过 `<bean>` 标签在 XML 文件中定义 Bean,或者使用 `@Component`、`@Service` 等注解在 Java 类上声明 Bean[^5]。 示例代码(XML 配置): ```xml <bean id="userDao" class="com.mayuanfei.springioc.dao.impl.UserDaoImpl" /> ``` 示例代码(注解配置): ```java @Component public class UserDaoImpl implements UserDao { // 实现方法 } ``` ##### (2) 依赖注入 Spring 通过反射机制解析 Bean 的依赖关系,并将其注入到目标对象中。以下是一个简单的依赖注入示例: 示例代码(字段注入): ```java @Service public class UserService { @Autowired private UserDao userDao; // 自动注入 UserDao } ``` ##### (3) 生命周期管理 Spring 容器会管理 Bean 的整个生命周期,包括初始化、运行时和销毁阶段。开发者可以通过实现特定的接口(如 `InitializingBean` 和 `DisposableBean`)或使用注解(如 `@PostConstruct` 和 `@PreDestroy`)来定制 Bean 的生命周期行为。 示例代码(生命周期管理): ```java @Component public class MyBean { @PostConstruct public void init() { System.out.println("Bean 初始化"); } @PreDestroy public void destroy() { System.out.println("Bean 销毁"); } } ``` ##### (4) 扩展机制 Spring 提供了丰富的扩展点,允许开发者自定义容器的行为。例如,通过实现 `BeanFactoryPostProcessor` 或 `BeanPostProcessor` 接口,可以在 Bean 初始化前后插入自定义逻辑[^4]。 #### 5. Spring IOC 的优势 Spring IOC 的核心优势包括: - **解耦**:对象之间不再直接依赖具体实现,而是通过接口或抽象类进行交互。 - **灵活性**:通过配置文件或注解动态管理 Bean,便于修改和扩展。 - **可维护性**:集中处理对象的创建和依赖关系,降低了代码复杂度。 ### 总结 Spring IOC 是一种通过容器管理对象生命周期和依赖关系的设计模式。其核心原理包括元数据解析、依赖注入、生命周期管理和扩展机制。通过这些机制,Spring 实现了对象控制权的反转,从而提高了系统的解耦性、灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值