Spring项目所引用的一切依赖jar包和自定义设置

导入Spring使用的maven依赖:



    junit
    junit
    4.12



    org.springframework
    spring-webmvc
    5.2.2.RELEASE

applicationContext.xml (beans.xml):




    
    
    
    
    
        
    


假设我们使用Spring的IOC创建对象,默认创建的bean对象是用 无参方式 方式创建对象,如果我们要使用有参构造对象,那么请务必保证我们的对象是有 有参构造函数 的类,同时如果要用set方式注入的话也要保证我们所创建的对象的类的各个参数是有 Set 方法的类!!!

bean的配置:

 
 

有参构造创建对象方法:

  
    
     

自动装配

xml中实现自动装配:

    
    
    
        
        


使用注解实现自动装配:

要使用注解须知

  1. 导入约束 context约束
  2. 配置注解的支持:

@Autowired

直接在属性上用即可!也可以在set方式上使用!

使用Autowired我们可以不用使用Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在且符合名字(ByName)

测试代码**:

public class People {    
    //如果显式的定义了AutoWired的required属性为false,说明这个对象可以为null,否则不允许为空
    
    @Autowired(required = false) 
    @Qualifier(value = "cat111")
    private Cat cat;    
    @Autowired    
    private Dog dog;    
    private String name; 
}

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候、我们可以使用@Qualifier(value = "xxx")去配合@Autowired的使用,指定一个唯一的bean对象注入

@Resource注解

在java1.8以后使用这个java的原生注解需要加入依赖的jar包:

    
    javax.annotation    
    javax.annotation-api    
    1.3.2 

使用:

public class people
{ @Resource(name="cat") 
  private Cat cat; 
  @Resource 
  private Dog dog; 
}

小结:

@Autowired是属于spring的注解,它所在的包org.springframework.beans.factory.annotation,它是按byType注入的,默认是要依赖的对象必须存在,看源码就可以理解,boolean required() default true;可以看到默认值是true,如果需要允许依赖对象是null,那就@Autowired(required=false)就可以了。

如果我们想@Autowired按名称装配,可以结合@Qualifier注解一起使用
@Autowired
@Qualifier("user")
private User user;

@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找 不到的情况下,就报错!

执行顺序不同:@Autowired默认通过byType的方式实现 @Resource默认通过byname 的方式实现

使用注解开发 [重点]

在Spring4之后,要使用注解开发,必须要保证AOP包已经导入了 [此包已经包含在了spring-webmvc的包里面了]

使用注解需要导入context约束,增加注解的支持!,并且开启注解的支持

bean属性如何注入:

//两种方法都行,在属性和set方法上都可以使用注解进行属性注入 
@Component public class User {    
    //相当于 
    @Value("kuangshen")    
    public String name;
    
    //相当于 
    @Value("kuangshen")    
    public void setName(String name) 
    {        
        this.name = name;    
    } 
}

衍生的注解 :

@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!

  • dao 【@Repository】

  • service 【@Service】

  • controller 【@Controller】

    这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

自动装配:

@Autowired:自动装配通过类型、名字 
如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value="xxx") 
@Nullable:字段标记了这个注解,说明这个字段可以为null 
@Resource:自动装配通过名字、类型 
@Component:自动装配通过名字、类型

作用域:

@Component 
@Scope("prototype") 
public class User {    
    //相当于 
    
    @Value("尹锐")    
    public String name; 
}

小结:

我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持

 
 
 

使用Java的方式配置Spring (略)

AOP

横切关注点、切面(ASPECT)、切入点(PointCut)

SpringAOP中,通过Advice定义横切逻辑,Spring中支持5种类型的Advice:

  • 前置通知
  • 后置通知
  • 环绕通知
  • 异常抛出通知
  • 引介通知

即 Aop 在 不改变原有代码的情况下 , 去增加新的功能 .

使用Spring实现AOP

【重点】使用AOP织入,需要导入一个依赖包!

 
        
    org.aspectj    
    aspectjweaver    
    1.9.4 

在applicationContext.xml中加入对aop支持的头文件(命名空间)

方式一:使用Spring的API接口【主要SpringAPI接口实现】 :

方式二:自定义类来实现AOP【主要是切面的定义】

方式三:使用注解实现!

package com.kuang.diy;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * @author yuqiliu
 * @create 2020-01-03  22:03
 */

//方式三:使用注解方式实现AOP

@Aspect  //标注这个类是一个切面
public class AnnotationPointCut {

    @Before("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void before()
    {
        System.out.println("===========方法执行前==========");
    }

    @After("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void after()
    {
        System.out.println("===========方法执行后==========");
    }

    //在环绕增强中,我们可以给定一个参数,代表我们要获取处理切入的点:
    @Around("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("环绕前");
        //执行方法
        Object proceed=jp.proceed();
        System.out.println("环绕后");


        Signature signature = jp.getSignature();//获得签名
        System.out.println("signature:"+signature);
        System.out.println(proceed);
    }

}

applicationContext.xml:




    
    
    
    


    
    









    














    
    
    
    


声明式事务(略)

Spring-Mybatis整合操作(略)

你可能感兴趣的:(Spring项目所引用的一切依赖jar包和自定义设置)