Spring Framwork_01

Core Container(核心容器):管理对象的技术
1.Beans
2.Core
3.Context
4.SpEL

Core:核心工具包,包括字节码操作cglib、asm,资源的抽象Resource,对象实例化化工具等等。
Beans:Bean 的定义、Bean 的创建以及对 Bean 的解析。
Context:Context模块建立在Core和Beans模块之上,是Bean运行环境(即保存维护Bean的状态、数据,Bean之间的关系),又称之为Ioc容器。
SpEL:提供了一个强大的表达式语言,可以在运行时查询和操作对象。

AOP(面向切面编程):在不影响源程序的情况下加强功能,依赖于Core Container
Aspects(AOP思想实现)

Data Access(数据访问)/Integration(数据集成)
1.JDBC
2.ORM
3.OXM
4.JMB
5.Transactions

Web(Web开发)
1.WebSocket
2.Servlet
3.Web
4.Portlet

Test(单元测试和集成测试)请添加图片描述
Spring核心概念
1.IoC/DI
2.IoC容器
3.Bean

问题:代码耦合度高
解决方案:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象,即为控制反转(IoC)(Inversion of Control)控制反转
请添加图片描述
对象的创建控制权由程序转移到外部,这种思想称为控制反转

Spring技术对IoC思想进行了实现
1.Spring提供了一个容器,称为Ioc容器,用来充当Ioc思想的外部
2.IoC容器负责对象的创建初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean
DI(Dependency Injection)依赖注入
在容器中建立bean和bean之间的依赖关系的整个过程,称为依赖注入
请添加图片描述

目的:充分解耦
1.使用IoC容器管理bean(IoC)
最终效果
使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

IoC思路分析
1.管理什么?(Service和Dao)
2.如何将被管理的对象告知IoC容器?(配置)
3.被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
4.IoC容器得到后,如何从容器中获取到bean?(接口方法)
5.使用Spring导入哪些坐标?(pom.xml)

ApplicationContext
依赖包
在这里插入图片描述

public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("appliactionContext.xml");//通过
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
    }

ApplicationContext(interface)
extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ApplicationContext主要实现类:

ClassPathXmlApplicationContext : 从类路径下加载配置文件。

FileSystemXmlApplicationContext : 从文件系统中加载配置文件。

ApplicationContext在初始化上下文时就实例化所有的单例Bean.请添加图片描述
ClassPathXmlApplicationContext
AbstractXmlApplicationContext
AbstractRefreshableConfigApplicationContext
AbstractRefreshableApplicationContext
AbstractApplicationContext
extends DefaultResourceLoader implements ConfigurableApplicationContext(extends ApplicationContext, Lifecycle, Closeable )

与BeanFactory不同的是,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。而BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。请添加图片描述

 <bean id="bookDao" class="com.example.demo.dao.impl.BookDaoImpl"/>

    <bean id="bookService" class="com.example.demo.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

property :配置当前Bean的属性
name属性:表示配置哪一个具体的属性
ref属性:表示参照哪一个Bean请添加图片描述
bean配置
bean基础配置
bean别名配置
bean作用范围配置

请添加图片描述
name属性:起别名
请添加图片描述
spring默认情况创建的Bean是单例的(是指创建的实例只有一个)
scope属性:Bean的作用范围
singletion:单例对象
prototype:非单例对象

在这里插入图片描述
请添加图片描述
singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
prototype表示每次获得bean都会生成一个新的对象,每次请求(每次使用)创建新的实例,destroy方式不生效.
request表示在一次http请求内有效(只适用于web应用)
session表示在一个用户会话内有效(只适用于web应用)

Bean实例化
IoC使用无参构造方法来实例化对象
无参构造方法如果不存在,将抛出BeanCreationException异常

<bean id="orderDao" class="com.example.demo.factory.OrderDaoFactory" factory-method="getOrderDao"/>

静态工厂实例化Bean

    <bean id="userFactory" class="com.example.demo.factory.UserDaoFactory"/>

    <bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>

实例工厂实例化Bean

    <bean id="userDao" class="com.example.demo.factory.UserDaoFactoryBean"/>
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    @Override
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

使用FactoryBean实例化bean

Bean生命周期
1.使用配置

    public void init(){
        System.out.println("init...");
    }

    public void destory(){
        System.out.println("destory...");
    }
    <bean id="bookDao" name="service service2 bookEbi" class="com.example.demo.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appliactionContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("service");
        bookDao.save();
        ctx.close();
ctx.registerShutdownHook();//注册关闭钩子,在虚拟机关闭之前将IoC关闭

2.使用接口

implements BookService, InitializingBean, DisposableBean

直接在工厂·类中引入InitializingBean, DisposableBean接口,在xml配置中可以不写init-method="init" destroy-method="destory"
在这里插入图片描述

init->set->serviceinit
请添加图片描述
请添加图片描述
依赖注入的两种方式
1.普通方法(set方法)
2.构造方法请添加图片描述

<bean id="bookDao" name="service service2 bookEbi" class="com.example.demo.dao.impl.BookDaoImpl" >
        <property name="databaseName" value="mysql"/>
        <property name="connectionNum" value="10"/>
    </bean>

property的value属性,用来给普通变量赋值

    <bean id="bookService" class="com.example.demo.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
``![请添加图片描述](https://img-blog.csdnimg.cn/33314bbd3e84414095cef48263d32faf.jpeg)
`
![请添加图片描述](https://img-blog.csdnimg.cn/b8ecf01bfcb543618a944111c9580ef0.jpeg)
![请添加图片描述](https://img-blog.csdnimg.cn/e576d5ef810d44d38455cc58702d0794.jpeg)
**依赖自动装配**
1.IoC容器根据Bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
2.自动转配方式
1>按类型(常用)
2>按名称
3>按构造方法
4>不启用自动装配

按类型匹配要让自动装配的bean唯一
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值