@Controller: 标识一个类是Spring MVC controller处理器, 用来创建处理http请求的对象
@Controller
public class TestController {
@RequestMapping("/test")
public String test () {
String str = "Spring 注解大全";
return str;
}
}
@RestController: 这个注解是spring4加入的, 没有这个注解之前在@Controller中返回json需要@ResponseBody来配合,如果直接使用@RestController替代@Controller就不需要在配置@ResponseBody,默认返回json格式;
@RestController
public class TestController {
@RequestMapping("/test")
public String test () {
String str = "Spring 注解大全";
return str;
}
}
@Service: 主要用于标注业务层组件,其实就是用注解的方式把这个类注入到spring配置中;
@Autowired: 用来装配bean, 可以写在字段或者方法上, 默认情况下要求依赖对象必须存在, 如果要允许为null值, 可以设置它的required属性为false, 例如: @Autowired(required=false)
@RequestMapping: 提供请求映射地址,相当于请求的url.
@RequestParam: 用于将请求参数映射到功能处理方法上, 例如:
public String test(@RequestParam Integer age) {
String str = "";
return str;
}
这个age就是接收从接口传递过来参数age的值, 如果接口传递过来的参数名与接收的参数名不一致则可以如下设置:
public String test(@RequestParam("people_age") Integer age) {
String str = "";
return str;
}
其中people_age就是接口传递过来的参数, age是映射people_age的参数名,
@Cacheable: 用来标记缓存查询, 用于方法或者类中
当标记在方法上时表示该方法是支持缓存的,
当标记在类上时表示该类中的所有方法都支持缓存的;
参数 | 解释 | 例子 |
value | 名称 | @Cacheable(value={”a1”,”a2”} |
key | key | @Cacheable(value=”a1”,key=”#id”) |
condition | 条件 | @Cacheable(value=”a1”,condition=”#id=1”) |
比如: @Cacheable(value="orderCache")标识的是当调用标记了这个注解的方法时,逻辑默认加上从缓存获取结果的逻辑, 如果缓存中没有数据,则执行用户编写查询逻辑, 查询成功后同时将结果放到缓存中,说到缓存一般都是key-value形式的, 因此key就是方法中的参数(id),value就是查询的结果, 而命名空间OrderCache是在spring*.xml文件中定义的.
@Cacheable(value = "orderCache")
public Order getOrderName(String id) {
Order order = new Order();
order = getOrder(id);
return order;
}
@CacheEvict: 用来标记要清空缓存的方法, 当这个方法被调用后即会清空缓存,@CacheEvict(value = "OrderCache")
参数列表
参数 | 解释 | 例子 |
value | 名称 | @CachEvict(value={”b1”,”b2”} |
key | key | @CachEvict(value=”b1”,key=”#id”) |
condition | 缓存的条件,可以为空 | |
allEntries | 是否清空所有缓存内容 | @CachEvict(value=”b1”,allEntries=true) |
beforeInvocation | 是否在方法执行前就清空 | @CachEvict(value=”b1”,beforeInvocation=true) |
@Resource: @Resource的作用相当于@Autowired,区别为@Autowired按byType自动注入, 而@Resource是按byName自动注入的,@Resource有两个属性比较重要,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字, 而type属性则解析为bean的类型,所以如果使用name属性, 则使用byName的自动注入策略, 而使用type的则使用byType的自动注入策略, 如果name与type都不指定,则通过反射机制使用byName自动注入策略.
@Resource的装配顺序,
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
@Repository: 用于标注访问数据组件, 即DAO组件,
@Component: 泛指组件,当组件不好归类时,可以使用这个注解进行标注
@Scope: 用来配置spring bean的作用域, 它标识bean的作用域, 默认是单例,
singleton: 单例模式, 全局有且仅有一个实例
prototype: 原型模式, 即每次获取bean时均会有一个新的实例[多例]
request: request表示针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session: session表示针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
global session: 只在portalt应用中应用, 给每一个global http session 新建一个Bean实例
@Required: 适用于bean属性的setter方法, 并表示受影响的bean属性必须在xml文件配置时进行填充,否则,容器会抛出一 个 BeanInitializationException异常.
@Qualifier: 当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可 以 使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。
@Bean: 该注解用于告诉方法产生一个Bean对象, 然后这个bean对象交给spring管理(和xml配置文件中的bean标签作用一致).
@Configuration: 该注解主要作用在类上,表明该类是一个配置类,相当于xml文件, 属于java配置的方式,该方式是 Spring4.x推荐的配置方式, 可完全替代xml配置。
@Configuration
public class ShiroConfig {
@Bean(name = "myRealm")
public MyRealm myAuthRealm() {
MyRealm myRealm = new MyRealm();
log.info("myRealm注册完成");
return myRealm;
}
}
@GetMapping: spring4.3中引入了{@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping}