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();
    }
}

spring学习小结_第1张图片
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学习小结_第2张图片
此时:任何时候,只要修改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进行显式装配。
无法从编译期的类型检查中受益。
功能不够强大。
构造器注入:目前装配集合只能通过来实现

    
      
        Sgt. Pepper's Lonely Hearts Club Band
        With a Little Help from My Friends
        Lucy in the Sky with Diamonds
        Getting Better
      
    

setter注入:装配集合

/* 原始定义 private List list; private Map map; private Set set; private Properties props; public void setList(List list) { this.list = list; } public void setMap(Map 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>

创建一个根配置组合多个配置,在根配置中启用组件扫描
spring学习小结_第3张图片

高级配置:
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,如果在方法中有错误抛出,则执行此建议

创建环绕通知

你可能感兴趣的:(java)