Spring框架知识总结—IOC篇

概念

介绍

Spring 框架是一个 开放源代码 J2EE 应用程序框架, Rod Johnson 发起, 是针对 bean 的生命周期进 行管理的轻量级容器 lightweight container )。

功能

Spring 是一个开源容器框架,它集成各类型的工具,通过核心的 Bean factory 实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean ,这样就可以实现各种功能的管理,包括动态加载和切面编程。

优点

一站式

  • 使用Spring框架就可以实现应用开发中的各种,如创建实例、jdbc、资源跳转等;

轻量级

  • 应用体积小
  • 应用耦合度降低

搭建必备

  • spring core : spring核心包;
  • spring context:指的是spring容器包;
  • spring beans: 相当于 java中的bean
  • spring expression (spel) : spring表达式语言;
  • spring jcl 对日志的支持;

IOC

概念

  • 控制反转Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度
  • spring提供的一种容器;

功能

控制反转—解决代码耦合度偏高问题:对象的创建控制权由程序转移到外部,由外部来提供对象。

作用

  • 控制反转简单来说就是将程序员new对象的操作,交给spring容器进行创建、管理;
  • IoC容器:负责对象的创建、初始化工作,被创建或被管理的对象在IoC容器中称为Bean。用来充当IoC思想中的外部

入门

ClassPathXmlApplicationContext :类路径 src 下面
FileSystemXmlApplicationContext :文件系统路径 ——> 绝对路径;

BeanFactoryFactoryBean的区别:

两个类没任何关系;

BeanFactoryApplicationContext的区别:

BeanFactory ApplicationContext 的父接口,也可以代表 spring 容器。区别是:只有在第一次调
用的时候才会将 bean 进行实例化;而 ApplicationContext 在容器实例化的时候,会将所有的 bean
实例化。

IOC-xml配置

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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
id:该属性是一个字符串,用于标识单个 Bean 定义。
class:该属性定义 Bean 的类型,并使用完全限定的类名。
destroy-method:销毁方法;
init-method:初始化方法;
factory-bean="" 用来配置实例工厂;
factory-method="" 工厂中的具体方法;
lazy-init="default" 懒加载;默认值是false表示的是启动的时候不懒加载;
如果设置成true,在容器加载的时候不加载该bean,在第一次调用
该bean的时候,才进行加载。
name="" name属性值在此处等同于id;理论上可重复,在整合struts2的时候可以重复;
struts2中name属性类似于URL写法,"/xxx";
scope="" 作用域:
singleton:单例;默认spring全部使用单例;
prototype:多例;
request:每次请求生成一个对象;
session:每次会话生成一个对象;
-->
<bean id="u" class="cn.ry.pojo.User" >
</bean>
<bean id="dao" class="cn.ry.dao.impl.UserDaoImpl"></bean>
</beans>

JavaBean配置

静态工厂类实现
创建静态工厂实体类
public class StaticFactory {
public static Object getObject() {
//获取userDAO;
UserDao dao = new UserDaoImpl();
System.out.println("静态工厂实现-----------------");
return dao;
}
}
xml
<!-- 通过静态工厂类来得到想要的dao实现类:
factory-method:工厂类中的方法;
-->
<bean id="sfactory" class="cn.ry.factory.StaticFactory" factorymethod="getObject">
</bean>

实例工厂类实现

java类操作

public class InstanceFactory {
public Object getObject() {
//获取userDAO;
UserDao dao = new UserDaoImpl();
System.out.println("实例工厂实现-----------------");
return dao;
}
}

xml配置

<!-- 通过实例工厂类来得到想要的dao实现类:
实例工厂需要先配置实例工厂对象;
-->
<bean id="ifactory" class="cn.ry.factory.InstanceFactory"></bean>
<bean id="dao" factory-bean="ifactory" factory-method="getObject">
</bean>

Bean生命周期控制:

1.Xml文件中配置初始化和销毁方法—init-method/destroy-method;

2.使用接口控制-InitializingBean,DisposableBean

Bean生命周期:

  • 初始化容器
  1. 创建对象(内存分配)
  2. 执行构造方法
  3. 执行属性注入(set操作)
  4. 执行bean初始化方法
  • 使用bean(执行业务操作)
  • 关闭/销毁容器(执行bean销毁方法)

IOC-注解配置

@Component
如果类上面添加该注解,表示将当前类交给 spring 容器来进行管理。

要求

  • 在项目中需要导入spring-aopjar包;
  • 在配置文件中添加context的约束以及命名空间xmlns
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 开启包扫描:开启后的包中的类添加@Component就可以交给spring容器管理
注意:
1、此处写的是包名;
2、多个的话使用,进行分隔;
-->
<context:component-scan base-package="cn.ry.pojo"></context:componentscan>
</beans>
@PostConstruct: 方法级别注解,加上后表示该方法是初始化方法 ;
@PreDestroy: 方法级别的注解,加上后表示该方法是销毁方法 ;
@Lazy: 懒加载 ;

@Component相近的语义化注解:

  • @Repository 放置在dao;
  • @Service 放置在service实现类上;
  • @Controller 放置在控制层上——》在控制层上的@Controller@Component有所区别,不可互换。

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值