spring

spring 基本概念:
Ioc(DI) 控制反转(依赖注入)
Aop 切面编程

IOC 是一种思想 (控制权转移)
DI 是一种具体实现 (反射= java 动态编译 class 类实例)
顺序编程中依赖关系 , DI由容器负责依赖关系管理

类似于中介编程只需要某个对象,而这个对象所需要的其他资源(对象,数据等)不需要知道,有中介负责

一、单属性值的装配

//setter注入,提供无参构造器,提供setXX方法
<property name="" value=""></property>
//如果该value是另外一个bean的引用
<property name="" ref=" 另一个bean的id"></property>
//构造器注入
<contructor-arg value=" ">
//如果该value是另外一个bean的引用
<contructor-arg ref="另一个bean的id">

二、复数属性值的装配
当bean的属性值是复数时,即属性的类型是集合。
当配置集合类型的bean属性时,spring提供了4种类型的集合配置元素,如下:

集合元素 用途
装配list类型的值,允许重复
装配set类型,不允许重复
装配map类型的值,名称和值可以是任意类型
装配properties类型的值,名称和值必须都是String类型

<bean id="userService" class="com.spring.service.UserService"> 
    <property name="list"> 
        <list> 
            <value>aaaa</value> 
            <value>bbbb</value> 
        </list> 
    </property> 
 </bean> 

//2、set集合

<bean id="userService" class="com.spring.service.UserService"> 
    <property name="set"> 
        <set> 
            <value>cccc</value> 
            <value>dddd</value> 
        </set> 
    </property> 
</bean>  

//3、map集合

<bean id="userService" class="com.spring.service.UserService"> 
    <property name="set"> 
        <map> 
            <entry key="1111" value="aaaa"/> 
            <entry key="2222" value="bbbb"/> 
        </map> 
    </property> 
</bean> 

//4、properties

<bean id="userService" class="com.spring.service.UserService"> 
    <property name="pro"> 
        <props> 
            <prop key="1111">aaaa</prop> 
            <prop key="2222">cccc</prop> 
        </props>   
    </property> 
</bean>

bean命名空间配置方式(util c p)

注解:

    @Autowired
    @Qualifier("service")//限定符 service= beanId
    EmployeeService employeeService;

@Service("service")
public class EmployeeServiceImpl implements EmployeeService {
    public EmployeeDto getEmployeeById(Long id) {
        return new EmployeeDto();
    }
}
@Scope 简单点说就是用来指定bean的作用域 (也可以在xml配置中设置scope属性)
scope:prototype、request、session、global session作用域

Ioc容器   AOP

DefaultListableBeanFactory核心

DefaultListableBeanFactory加载配置文件XML等
会有不同的实现类加载不同类型的文件

BeanDefinition对应java bean
通过不同的解析不同的XML标签 完成bean的初始化

BeanFactory工厂存放不同的bean实例
bean实例AbstractBeanDefinition是BeanDefinition的实现类


ApplicationContext是BeanFactory的扩展,扩展了很多功能

NamespaceHandler标签解析器接口(具体的实现类解析XML标签 比如:<context:component-scan base-package="com.org.cbs" />)

完成解析后初始化BeanFactory实例

BeanDefinitionParser 解析器接口(具体实现类)对BeanFactory实例
进行增强,增加其他操作
示例:
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
DemoBean demo = (DemoBean) context.getBean("demoBean");


spring代码设计
定义结构
    分解实现具体方法
定义接口功能
    扩展接口实现

Ioc容器  反射  bean管理  BeanDefinition
代理模式    aop
工厂模式    各种beanFactory
观察者模式  监听器  (ApplicationListener监听器实现此接口)
模板模式    各种接口  spring jdbc
单例模式    spring默认bean是单例的
策略模式    xml 标签解析器 (spring mvc)
装饰器模式  beanWrapper 
适配器模式  springmvc HandlerMapping HandlerAdapter
责任链模式  HandlerExecutionChain 主要负责请求的拦截器的执行和请求的处理,但是他本身不处理请求,
            只是将请求分配给在链上注册的处理器执行,这是一种责任链的实现方式
            HandlerExecutionChain维护了HandlerInterceptor(拦截器)的集合,可以向其中注册相应的HandlerInterceptor

Spring定义bean的三种方式和自动注入
https://blog.csdn.net/sinat_34596644/article/details/53080026

Spring定义bean的三种方式
1. 基于XML的bean定义(需要提供setter方法)
2. 基于注解的bean定义(不需要提供setter方法)
    Spring为此提供了四个注解,这些注解的作用与上面的XML定义bean效果一致,在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),也可以自己修改:
    @Component:当对组件的层次难以定位的时候使用这个注解
    @Controller:表示控制层的组件
    @Service:表示业务逻辑层的组件
    @Repository:表示数据访问层的组件
    使用这些注解的时候还有一个地方需要注意,就是需要在applicationContext.xml中声明<contex:component-scan...>一项,指明Spring容器扫描组件的包目录。
3. 基于Java类的bean定义(需要提供setter方法)
    @Configuration
    public class BeansConfiguration {

        @Bean
        public Student student(){
            Student student=new Student();
            student.setName("张三");
            student.setTeacher(teacher());
            return student;
        }
    }
Spring的自动注入  
Spring提供了五种自动装配的类型
    no:顾名思义, 显式指明不使用Spring的自动装配功能
    byName:根据属性和组件的名称匹配关系来实现bean的自动装配
    byType:根据属性和组件的类型匹配关系来实现bean的自动装配,有多个适合类型的对象时装配失败
    constructor:与byType类似是根据类型进行自动装配,但是要求待装配的bean有相应的构造函数
    autodetect:利用Spring的自省机制判断使用byType或是constructor装配


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值