SSM Spring

Spring

分层的java se/ee 应用 全栈式 轻量级开源框架

  • 全栈式:对主流技术和框架进行整合,对三层架构提供了解决方案
  • 轻量级:使用了多少服务,启动加载的资源多少以及耦合度等

Spring :IOC AOP 两大核心

  • IOC:控制反转, 对象的创建权 交给 spring
  • AOP :面向切面编程,不修改源码,对方法增强

spring优势

  • 方便解耦,简化开发。
    • 耦合,指对象的依赖关系,一个模块更改其他模块也需要更改。
    • 解耦,降低程序间的依赖关系。配置文件+反射
  • AOP编程支持
  • 声明式事务的支持,通过配置
  • 方便测试
  • 方便集成各种框架

IOC

控制反转

控制:java对象的控制权限(对象的创建,销毁)
反转:对象的控制权限由开发者类中手动创建反转到spring容器控制

// spring上下文对象,加载的同时创建了bean对象到容器中
//aplicationContext.xml核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationCOntext.xml");
context.getBean("userDao");

Spring API

BeanFactory 和ApplicationContext区别

BeanFactory 第一次被调用 getBean()才会创建Bean对象
ApplicationContext 类加载的同时,创建了bean对象到容器中

BeanFactory实现类

  1. FileSystemXmlApplicationContext,磁盘路径,绝对路径
  2. ClassPathXmlApplicationContext ,类的根路径下加载
  3. AnnotationCOnfigApplicationContext

getBean重载方法

  1. getBean(String id)
  2. getBean(Class requireType)
  3. getBean(String id,Class requireType)

spring配置文件

bean标签

默认调用无惨构造

scope取值:
  • singleton 默认,单例,生命周期与容器相同
  • prototype 多例,调用getBean()方法时才实例化
Bean生命周期

init-method 对象创建后执行 init-method

实例化方式
  • 工厂静态方法
// class staticFactory 调用factroy-method
 
  • 工厂普通方法
    先生成工厂实例,再调用方法生成其他实例


DI 依赖注入

对象注入

构造方法


    
    

ref和id一致吗?

P命名空间注入

普通数据类型注入


    
    
    

集合数据类型注入

...

    
        aaa
        
    



    
        
        
    

xml配置AOP

execution([修饰符] 返回类型 包名.类名.方法名(参数))
1.访问修饰符可以省略
2. 返回值类型,包名,类名,方法名可以用 *匹配
    execution(* *.*.*.*())

3.包名和类名中间一个点 . 代表当前包下的类,两个点.. 代表当前包及其子包的类
execution(* *..*.*())
 
4. 参数列表 .. 表示任意个数,任意类型的参数
execution(* *..*.*(..))

环绕通知

public Object around(ProceedingJoinPoint pjp) {
    Object processed = null;
    try {
        System.out.println("前置");
        //切点方法执行
        processed = pjb.processed();

        System.out.println("后置");
    } catch(Exception e) {
        System.out.println("异常");
    } finall {
        System.out.println("最终");
    }
}

AOP注解

@Component
@Aspect  // 升级为切面类
public class MyAdvice {
    // 配置切入点和通知
    @Before("execution(* com.lagou.service.impl.AccountServiceImpl.*(..))")
    public void before() {
        ...
    }
}

/applicationContext.xml/




 

aop中配置的作用是代理类通过反射获取被代理对象的Class ,接口,方法等

Spring JDBCTemplate

JDBCTemplate jdbc= new JDBCTemplate(DataSource dataSource);

int update(sql,params); //执行增、删、改语句

List query(sql,new BeanPropertyRowMapper<>(User.class)); //查询多个 
T queryForObject(sql,new BeanPropertyRowMapper<>(User.class),params); //查询一个 
new BeanPropertyRowMapper<>(); //实现ORM映射封装

事务

  • 编程式事务

    • PlatformTransactionManager接口 spring事务管理器
  • 声明式事务

事务的传播

定义:一个业务方法被另一个方法调用,如何进行事务控制
REQUIRED
如果没有事务,就新建事务;如果已经存在事务,加入到事务中。被调用的方法必须进行事务控制

SUPPORTS
当前没有事务,以非事务进行。有事务,加入事务。当前被调用的方法有没有事务都可以执行(查询操作)

事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事务状态



    
        
        
    


 


 
  
   

平台事务管理器
事务通知配置
事务注解驱动配置(xml 或注解)

Spirng ApplicationContext

ServletContextListener 监听器监听web应用启动,加载Spring配置文件,创建ApplicationContext,存储到servletContext域中

 ApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());

Account account = (Account) webApplicationContext.getBean("account");

你可能感兴趣的:(SSM Spring)