Spring Framework --wenyu2

容器概述

ApplicationContext是Spring loC容器实现的代表,它负责实例化,配置和组装Bean。

容器通过读取配置元数据获取有关实例化、配置和组装哪些对象的说明。

配置元数据可以使用XML、Java注解或Java代码来呈现。

它允许你处理应用程序的对象与其他对象之间的互相依赖关系。 配置元数据的方式

  • 使用xml的配置 简单、直观适合入门

  • 基于注解的配置: Spring 2.5支持基于注解的元数据配置. SSM框架开发中的使用

  • 基于Java的配置: 从 Spring 3.0开始,由Spring JavaConfig项目提供的功能已经成为Spring核心框架的一部分。因此,你可以使用Java配置来代替XML配置

  • 定义外部bean . 从spring4.0开始支持springboot1.0之后springboot完全采用javaConfig的方式进行开发

    容器的实例化 对象在Spring容器创建完成的时候就已经创建完成,不是需要用的时候才创建

ioc的优点

1.解耦

2.集中管理

3.功能可复用(减少对象的创建和内存消耗)

4.使得程序的整个体系结构可维护性、灵活性、扩展性变高

// ClassPathXmlApplicationContext 根据项目路径的xml配置来实例化spring容器

// FileSystemXm1ApplicationContext根据磁盘路径的xml配置来实例化spring容器

// AnnotationConfigApplicationContext根据javaconfig来配置实例化spring容器

依赖注入

基于setter方法的依赖注入

1.属性必须声明了set方法
2. name是根据set方法的名字来的比如方法名字是: setIdxx ->name="idxx"  
<bean class="cn.tulingxueyuan.beans.User" id="user2">
   <property name="idtuling" value="1"></property>
   <property name="username" value="zhangsan" ></property>
   <property name= "realname" value="张三"></ property>
</ bean>

基于构造函数的依赖注入

1.将会调用自定义构造函数来实例化对象,就不会调用默认的无参构造函数
2, name是根据构造函数的参数名来的,比如:User(String idxx) -> name="idxx"3. name属性可以省略但是要注意参数的位置
4.如果非要把位置错开可以使用name或者index或者type5. index是下标―从开始
6. type在位置错开情况下只能在类型不一样的时候指定才有明显效果
<bean class="cn.tulingxueyuan. beans. User" id="user3">
    <constructor-arg name="username" value="lisi"></constructor-arg>
    <constructor-arg name= "id_xushu" value="1 "></constructor-arg>
    <constructor-arg name="reainame"value="李四"></constructor-arg>
</bean>

在容器实例化的时候就会加载所有的bean

控制加载顺序使用depends-on方法

 

懒加载bean 使用lazy-init设置

<! --
默认为false:在spring容器创建的时候加载(实例化)
true:在使用的时候(getBean)才会去加载(实例化)-->
<bean class="cn.tulingxueyuan.beans.Person" id="person2" lazy-init="true">
<property name="id" value="1"></property>
<property name="realName" value="吴彦祖"></ property><property name="name " value="徐庶"></ property>
</ bean>

自动注入

byType根据类型去自动匹配当出现多个类型或者匹配到类型则会报错 byName根据set方法的名字去自动匹配 constructor根据构造器去匹配:优先会根据参数名字去匹配,假如参数名字没有匹配到,会根据参数类型去匹配,会根据构造函数的参数进行完整的匹配注入:如果构造函数的参数Person(Wife wife3,User user) ioc容器里面必须要有同时有wife和userl,名字没有匹配到会根据类型匹配,类型假如出现多个会注入失败但是不会报错

 

 

注解的方式来注册bean

将一个类注入到ioc中的三种方式

  1. xml:<bean>

  2. @Component (@Controller,@Service,@Repository)

  3. @Bean @Import

Bean作用域分为 Singleton(单例)的作用域 和 Prototype(原型)的作用域

<!--作用域scope
 singleton 默认:单例只会在Ioc容器种创建一次
 prototype多例(原型bean)每次获取都会new一次新的bean-->
 
 <bean class="cn.tulingxueyuan.beans.Person" id="person3" scope="prototype ">
     <property name="id" value="1"></property>
     <property name="realName " value="吴彦祖"></property>
     <property name="name" value="徐庶"></property>
</ bean>
​

注解介绍

 

扫描包

  • base-package 设置需要扫描的包

  • 排除扫描:<context:exclude-filter设置需要排除扫描的选项包含扫描<context : include-filter设置需要包含扫描的选项

type: 1.annotation默认根据注解的完整限定名设置排除\包括 ​ 2.assignable根据类的完整限定名设置排除\包括 ​ 3.aspectj org.example.. Service+根据切面表达式设置排除\包括,一般不会使用

4.regex org . example . Default.*―根据正则表达式设置包括\排除,一般不会使用 ​ 5.custom org.example.MyTypeFilter 根据接口org.springframework. core. type . TypeFilter设置排除\包括,

  • 使用@Autowired来实现自动注入

    bytype? byname? 默认优先根据类型去匹配 如果匹配到多个类型则会按照名字匹配·如果名又没有匹配到则会报错:

    1. 可以去修改属性的名字对应bean的名字:userServiceImpl

    2. 可以去修改Bean的名字对应属性的名字:@Service("userService")3.可以通过@Qualifier设置属性的别字

    3. 可以通过@Qualifier设置属性的名字(覆盖):@Qualifier("userServiceImpl")

    4. 可以通过@Primary设置其中一个Bean为主要的自动注入Bean: @Primary

    5. 使用泛型作为自动注入限定符

基于java的容器配置

核心注解 @Bean和@Configuration

对比xml

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值