Spring的切点表达式

execution(returnType package.class.method(param)

1、returnType

返回类型: public String、private int

2、package.class.method

包.类.方法均可用*代替,例如: *.class.methodpackage.class.**

3、 param:

()匹配了一个不接受任何参数的方法
(..)零或者更多个任意类型参数的方法
(*)一个任意类型的参数方法

- 阅读全文 -

Spring AOP 中处理通知中的参数(注解方式)

演员演出需要记录每个演员的演出次数

1. Performance接口和Actor类

package aop;

/**
 * Created by guoli on 2017/7/28 0028.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public interface Performance {

    /**
     * @param number 演员编号
     */
    public void playTrack(String number);
}
package aop;

import org.springframework.stereotype.Component;

/**
 * Created by guoli on 2017/7/28 0028.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
@Component
public class Actor implements Performance {

    @Override
    public void playTrack(String number) {
        System.out.println(number + " number actor");
    }
}

- 阅读全文 -

Spring使用@Aspect注解创建切面

1. 表演接口Performance 和舞台剧LivingTheatre

package concert;

/**
 * ①普通Java类
 * Created by guoli on 2017/7/23 0023.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */

/**
 * Performance只是一个普通的Java接口
 * 使用如下切点表达式可以设置当perform()方法执行时触发通知的调用
 * execution(*  concert.LivingTheatre.perform(..))
 * 切点表达式解释如下:
 * execution 在方法执行时触发
 * *任意返回值类型
 * concert.LivingTheatre.perform 包-类/接口-方法
 * .. 任意参数
 */
public interface Performance {
    public void perform();
}
package concert;

import org.springframework.stereotype.Component;

/**
 * ②实现Performance接口的普通类
 * Created by guoli on 2017/7/23 0023.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */

/**
 * @Component泛指组件,和@Controller、@Service、@Repository在大多数情况下是通用的
 */
@Component
public class LivingTheatre implements Performance {

    @Override
    public void perform() {
        System.out.println("kaixinmahua........");
    }
}

2. 切点表达式

切点表达式基础知识

- 阅读全文 -

Spring注解 @Profile : 多环境配置管理

运行时根据激活的Profile决定创建哪个bean

一、配置不同的profile

Spring 3.1只能用在类级别上

假设开发环境(dev)下返回10,生产环境(prod)返回1000。

@Configuration
@Profile("dev")
public class devConfig {
    @Bean
    public int num() {
        return new Integer(10);
    }
}
@Configuration
@Profile("prod")
public class prodConfig {
    @Bean
    public int num (){
        return new Integer(1000);
    }
}

- 阅读全文 -

Spring使用Java配置自动装配Bean

Spring配置有3种主要的装配机制:

  1. Java自动装配
  2. Java显式配置
  3. XML显式配置

Spring从组件扫描和自动装配满足自动化装配bean:

  • 组件扫描(component scanning):Spring自动发现应用上下文所创建的bean.
  • 自动装配(autowiring):Spring自动满足bean之间的依赖.

自动化装配可以在最大程度上将显式配置降低到最少,但在将第三方库中的组件装配到自己的应用时是无法添加@Component和@Autowired注解的,这个时候只能选择Java或XML的显式配置.

- 阅读全文 -

Ant风格

最近在实施公司的权限产品时遇到了路径配置的问题,最后发现是***配置有误。

Spring的AntPathMatcher借鉴了Apache的Ant风格,支持的通配符有:?***regexp [a-z]+

1、 ? 匹配任意单字符

applicationContext_jdbc_ ?.xml 可以匹配applicationContext_jdbc_ a.xml、applicationContext_jdbc_ 1.xml

2、* 匹配0个或更多个字符

conf/applicationContext_ * _ spring.xml 可以匹配conf路径下的applicationContext_ _ spring.xml、applicationContext_ admin _spring.xml 等

3、** 匹配0个或更多个目录

conf/ **/jdbc.xml 可以匹配conf路径下任意层级的以xml结尾的文件,例如conf/jdbc.xml 、conf/ com /jdbc.xml 、conf/ com/xxx/xxx/jdbc.xml

4、{spring:[a-z]+}.jsp后面匹配到的内容作为参数赋值给冒号之前的变量

com/{filename:\\w+}.jsp 匹配到com/test.jsp,并给filename赋值为test

- 阅读全文 -

Spring的IoC容器初始化过程

IoC容器初始化分为3个过程:

1、Resource定位:寻找BeanDefinition定义(常见为Xml)的位置。

BeanDefinition资源定位是由ResourceLoader通过Resource接口完成,这个接口可以对各种形式的BeanDefinition做处理。

2、BeanDefinition载入:把用户定义好的Bean表示成IOC容器内部的数据结构(BeanDefinition)

BeanDefinition是POJO对象在IOC容器的抽象,IOC容器通过BeanDefinition管理各个Bean。

3、向IoC容器注册BeanDefinition:通过BeanDefinitionRegistry接口注册到IoC容器。

把载入过程中解析到的BeanDefinition通过BeanDefinitionRegistry接口注册到IoC容器,在IOC容器内部通过HashMap持有BeanDefinition。

- 阅读全文 -

Spring常用注解

注解可以用在类,方法,方法的参数上

@ResponseBody

Spring以字符串的形式渲染结果并将结果直接填充到HTTP的响应体中,直接返回给调用者,常用于构建RESTful的api

@Controller

用于定义控制器类,处理http请求在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)

@RestController

@ResponseBody和@Controller的合集,返回json

注意@Controller和@RestController在使用上的区别

@RequestMapping('/path')

配置URL映射,拦截'/*'的http请求

多个URL访问一个方法:@RequestMapping(value={"/path1","/path2"})

@Component

泛指组件,常在公用类上使用或当组件不好归类时

@Controller @Service @Repository 和 @Component在大多数的情况下是等效的

@ComponentScan

表示将该类自动发现(扫描)并注册为Bean,可以自动收集所有的Spring组件,包括不限于@Controller、@Service、@Repository、@Component和@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。

- 阅读全文 -