spring学习小结

一个spring程序由组件(Bean)、配置文件、容器(context)三部分组成
容器也是主程序逻辑的地方,如:

package com.test1;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class testMain {
    public static void main(String[] args) {
        //创建Spring上下文(加载bean.xml)
        ApplicationContext acx= new ClassPathXmlApplicationContext("bean.xml");
        //获取HelloWorld实例并赋值
        IntrduceDemo id=acx.getBean("IntrduceDemo",IntrduceDemo.class);
        id.setName("李佳奇");
        id.setAge(2);
        //调用方法
        id.intrduce();
        //销毁实例对象
        ((ClassPathXmlApplicationContext) acx).close();
    }
}

在这里插入图片描述
myApp.jar是容器,假如它要依赖lib.jar创建一个新的对象p,

Person p = null;  //此时只是myApp.jar依赖于lib.jar(通过接口Person),但并没有实现“注入”。
Person p = new Student();  //MyApp.jar就把Student的实例“注入”到了对象p中

但是此时是强耦合,一旦要改变p指向的对象就要修改myApp.jar的源代码
考虑到“开关原则”,主业务对修改关闭,对扩展开放。也就是说主业务myApp.jar不能修改源代码,但又要保证能拓展,也就是能改变p指向的对象。就需要这样:
在这里插入图片描述
此时:任何时候,只要修改Spring.xml的配置,就能改变myApp.jar中具体Person对象的注入。
https://zhuanlan.zhihu.com/p/64001753

spring配置文件总结:
spring的配置文件比较繁琐,但主要是做两件事:
1.组件(Bean)扫描。
2.自动装配:指定好bean之间的依赖(注入)。

用了组件扫描,就一定要用自动装配,反之不一定。
spring中的依赖注入又分为构造器注入和setter方法注入。

首先讲解自动配置:
1.组件扫描的自动配置:
2.指定依赖的自动配置:

手动装配:
1.利用java Config进行显式装配
2.利用XML进行显式装配。
无法从编译期的类型检查中受益。
功能不够强大。
构造器注入:目前装配集合只能通过<constructor-arg>来实现

    <constructor-arg>
      <list>
        <value>Sgt. Pepper's Lonely Hearts Club Band</value>
        <value>With a Little Help from My Friends</value>
        <value>Lucy in the Sky with Diamonds</value>
        <value>Getting Better</value>
      </list>
    </constructor-arg>

setter注入:装配集合

/* 原始定义
    private List<?> list;
    private Map<String,?> map;
    private Set<?> set;
    private Properties props;
 
    public void setList(List<?> list) {
        this.list = list;
    }
 
    public void setMap(Map<String, ?> map) {
        this.map = map;
    }
 
    public void setSet(Set<?> set) {
        this.set = set;
    }

*/
    <bean id="collectionsSpring" class="com.zlt.spring.day02.CollectionsSpring" scope="prototype">
        <property name="list">
            <list>
                <value>Hello World</value>
                <ref bean="dbConnection"/>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="key01" value="Hello World"></entry>
                <entry key="key02" value-ref="dbConnection"></entry>
            </map>
        </property>
        <property name="set">
            <set>
                <value>Hello World</value>
                <ref bean="dbConnection"/>
            </set>
        </property>
        <property name="props">
            <props>
                <prop key="key01">Hello World</prop>
                <prop key="key02">liuyang</prop>
            </props>
        </property>
    </bean>

创建一个根配置组合多个配置,在根配置中启用组件扫描
在这里插入图片描述

高级配置:
1.环境与profile。通过切换profile来实现对不同环境的整体切换
2.@Conditional注解:条件化的bean,是springboot实现的关键
3.处理自动装配:@Primary、@Qualifier限定符来限定唯一的装配
4.bean的作用域,@Scope
5运行时值注入:SpEL表达式

除了@Component注解,Spring容器提供了3个功能和@Component注解等同。它们分别是用于对Dao,Service及Web层的Controller进行注解
@Repository:用于对Dao实现类注解
@Service:用于对Service实现类注解
@Controller:用于对Controller实现类注解

AOP:
Spring AOP注解例子
@Before前置建议,它是在执行一个业务方法之前插入的切面
@AfterReturning,它是当一个方法正常运行后,执行的切面
@After,它是当方法执行成功或者出现异常的时候都会执行切面
@Around,它相当于一个AOP链,如果当前AOP执行后,就让下一个AOP执行
@AfterThrowing,如果在方法中有错误抛出,则执行此建议

创建环绕通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值