spring框架基础学习之路

2 篇文章 0 订阅

一、IoC控制反转

  1. IoC控制反转,全称Inverse of Control,是一种设计理念
  2. 由代理人来创建与管理对象,消费者通过代理人来获取对象
  3. IoC的目的是降低程序与程序之间直接耦合
  4. 加入IoC容器将对象统一管理,让对象关联变为弱耦合

二、DI依赖注入

  1. IoC是设计理念,是现代程序设计遵循的标准,是宏观目标
  2. DI(Dependency Injection)是具体技术实现,是微观实现
  3. DI在Java中利用反射技术实现对象注入(Injection)

三、Spring的含义

  1. Spring可从狭义与广义两个角度看待
  2. 狭义的Spring是指Spring框架(Spring Fremework)
1. Spring框架是企业开发复杂性的一站式解决方案
2. Spring框架的核心是IoC容器与AOP面向切面编程
3. Spring IoC负责创建与管理系统对象,并在此基础上扩展功能
  1. 广义的Spring是指Spring生态体系

四、Spring IoC容器职责

  1. 对象的控制权交由第三方统一管理(IoC控制翻转)
  2. 利用Java反射技术实现运行时对象创建与关联(DI依赖注入)
  3. 基于配置提高应用程序的可维护性与扩展性

五、XML管理对象(Bean)

  1. 三种配置方式
    a. 基于注解配置Bean
    b.基于Java代码配置Bean
    c. 基于XML配置Bean
    c1.applicationContext.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">
    <!--bean标签默认通过默认构造方法创建对象-->
    <bean id="apple1" class="com.imooc.spring.ioc.entity.Apple">

    </bean>
    <!--使用带参构造方法实例化对象-->
    <bean name="apple2" class="com.imooc.spring.ioc.entity.Apple">
        <constructor-arg name="title" value="红富士"/>
        <constructor-arg name="color" value="红色"/>
        <constructor-arg name="origin" value="欧洲"/>
        <constructor-arg name="price" value="19.8"/>
    </bean>

    <bean id="apple3" class="com.imooc.spring.ioc.entity.Apple">
        <constructor-arg index="0" value="红富士"/>
        <constructor-arg index="1" value="欧洲"/>
        <constructor-arg index="2" value="红色"/>
        <constructor-arg index="3" value="19.8"/>
    </bean>

    <!--利用静态工厂获取对象-->
    <bean id="apple4" class="com.imooc.spring.ioc.factory.AppleStaticFactory"
          factory-method="createSweetApple"/>

    <!--利用工厂实例方法获取对象-->
    <bean id="factoryInstance" class="com.imooc.spring.ioc.factory.AppleFactoryInstance"/>
    <bean id="apple5" factory-bean="factoryInstance" factory-method="createSweetApple"/>
</beans>

c2. XML方式创建IoC容器

//创建IoC容器并根据配置文件创建对象
ApplicationContext context = newClassPathXmlApplicationContext("classpath:applicationContext.xml");
  1. 实例化Bean的三种方式
    基于构造方法对象实例化
利用构造方法参数名实例化
<bean id="sweetApple" class="com.imooc.spring.ioc.entity.Apple">
 <!-- 没有constructor-arg则代表调用默认构造方法实例化 -->
 <constructor-arg name="title" value="红富士"/>
 <constructor-arg name="origin" value="欧洲"/>
 <constructor-arg name="color" value="红色"/>
</bean>

基于静态工厂实例化

  <!--利用静态工厂获取对象-->
    <bean id="apple4" class="com.imooc.spring.ioc.factory.AppleStaticFactory"
          factory-method="createSweetApple"/>
/**
 * 静态工厂通过静态方法创建对象,隐藏创建对象的细节
 */
public class AppleStaticFactory {
    public static Apple createSweetApple(){
        //logger.info("")
        Apple apple = new Apple();
        apple.setTitle("红富士");
        apple.setOrigin("欧洲");
        apple.setColor("红色");
        return apple;
    }
}

基于工厂实例方法实例化

    <!--利用工厂实例方法获取对象-->
    <bean id="factoryInstance" class="com.imooc.spring.ioc.factory.AppleFactoryInstance"/>
    <bean id="apple5" factory-bean="factoryInstance" factory-method="createSweetApple"/>
/**
 * 工厂实例方法创建对象是指IoC容器对工厂类进行实例化并调用对应的实例方法创建对象的过程
 */
public class AppleFactoryInstance {
    public Apple createSweetApple(){
        Apple apple = new Apple();
        apple.setTitle("红富士");
        apple.setOrigin("欧洲");
        apple.setColor("红色");
        return apple;
    }
}

六、从IoC容器获取bean

Apple sweetApple = context.getBean("sweetApple" , Apple.class);
或者
Apple sweetApple = (Apple)context.getBean("sweetApple");
---------------------------------------------------------------------- System.out.println(sweetApple.getTitle());

七、id与name区别

  1. id与name属性相同点
    bean id与name都是设置对象在IoC容器中唯一标识
    两者在同一个配置文件中都不允许出现重复
    两者允许在多个配置文件中出现重复,新对象覆盖旧对象

  2. id与name属性区别
    id要求更为严格,一次只能定义一个对象标识(推荐)
    name更为宽松,一次允许定义多个对象标识
    tips: id与name的命名要求有意义,按驼峰命名书写

八、路径匹配表达式
1.加载单个配置文件

//创建IoC容器并根据配置文件创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

2.加载多配置文件

String[] configLocations = new String[{"classpath:applicationContext.xml","classpath:applicationContext-1.xml"};
ApplicationContext context = newClassPathXmlApplicationContext(configLocations);

3.路径表达式

九、对象依赖注入

  1. 对象依赖注入
    依赖注入是指运行时将容器内对象利用反射赋给其他对象的操作
    基于setter方法注入对象
  <bean id="sweetApple" class="com.imooc.spring.ioc.entity.Apple">
        <!-- IoC容器自动利用反射机制运行时调用setXXX方法为属性赋值 -->
        <property name="title" value="红富士"/>
        <property name="color" value="红色"/>
        <property name="origin" value="欧洲"/>
        <property name="price" value="19.8"/>
    </bean>

利用setter实现对象注入

    <bean id="lily" class="com.imooc.spring.ioc.entity.Child">
        <property name="name" value="莉莉"/>
        <!-- 利用ref注入依赖对象 -->
        <property name="apple" ref="sweetApple"/>
    </bean>

基于构造方法注入对象

注入集合对象

十、bean scope属性详解

  1. bean scope属性
    bean scope属性用于决定对象何时被创建与作用范围
    bean scope配置将影响容器内对象的数量
    默认情况下bean会在IoC容器创建后自动实例化,全局唯一

2.scope用法

<bean id="bookDao"
 class="com.imooc.spring.ioc.bookshop.dao.BookDaoOracleImpl"
 scope="prototype" />

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述十一、基于注解配置IoC容器
1.基于注解的优势

   摆脱繁琐的XML形式的bean与依赖注入配置
   基于"声明式"的原则,更适合轻量级的现代企业应用
   让代码可读性变得更好,研发人员拥有更好的开发体验

2.三类注解

   组件类型注解-声明当前类的功能与职责
   自动装配注解-根据属性特征自动注入对象
   元数据注解-更细化的辅助IoC容器管理对象的注解

3.四种组件类型注解

@Component 组件注解,通用注解,被该注解描述的类将被IoC容器管理并实例化
@Controller 语义注解,说明当前类是MVC应用中的控制器类
@Service 语义注解,说明当前类是Service业务服务类
@Repository 语义注解,说明当前类用于业务持久层,通常描述对应Dao类

4.开启组件扫描

<!--XML配置开启组件扫描,才能使用注解-->
<context:component-scan base-package="com.imooc">
 <context:exclude-filter type="regx" expression="com.imooc.exl.*/>
</context:component-scan>

十二、两类自动装配注解

按类型装配
@Autowired 按容器内对象类型动态注入属性,由Spring机构提供
@Inject 基于JSR-330(Dependency Injection for Java)标准, 其他同@Autowired,但不支持required属性

按名称装配
@Named 与@Inject配合使用,JSR-330规范,按属性名自动装配属性
@Resource 基于JSR-250规范,优先按名称、再按类型智能匹配

十三、元数据注解

@Primary 按类型装配时出现多个相同类型对象,拥有此注解对象优先被注入
@PostConstruct 描述方法,相当于XML中init-method配置的注解版本
@PreDestroy 描述方法,相当于XML中destroy-method配置的注解版本
@Scope 设置对象的scope属性
@Value 为属性注入静态数据
<!--通知Spring IoC容器初始化时加载属性文件-->
    <context:property-placeholder location="classpath:config.properties"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值