@Controller
位置:【spring-context>>org>>springframework>>stereotype】
作用:处理http请求,表示在tomcat启动的时候,把这个类作为一个控制器加载到Spring的Bean工厂
参数:
例子:
@Controller
@Service
位置:【spring-context>>org>>springframework>>stereotype】
作用:将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean。其定义的bean默认是单例的,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。
参数:
例子:
@Service
@RequestMapping
位置:【spring-web>>org>>springframework>>web>>bind>>annotation】
作用:处理请求地址映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
参数:
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
例子:
@RequestMapping(value="/editeResourceEntityMapp",method = RequestMethod.POST )
@ResponseBody
位置:【spring-web>>org>>springframework>>web>>bind>>annotation】
作用:将java对象转为json格式的数据;将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
参数:
例子:
@RequestMapping("/savePorudctBaseinfo")
@ResponseBody
public JsonResult saveProductBaseinfo(ProductBaseInfo productBaseinfo) {
return productService.saveProductBaseinfo(productBaseinfo);
}
@RequestBody
位置:【spring-web>>org>>springframework>>web>>bind>>annotation】
作用: 1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;2)再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
参数:
例子:
@RequestMapping("/saveProductFieldEntityMappList")
@ResponseBody
public JsonResult saveProductFieldEntityMappList(@RequestBody ArrayList<ProductFieldEntityMapp> productFieldEntityMappList) {
productFieldEntityMappList.forEach(data -> {
//System.out.println("批量填入===="+data);
int id = data.getProductEntityId();
productService.saveProductTable(id, data);
});
return JsonResult.success();
}
@Autowired
位置:【spring-bean>>org>>springframework>>factory>>annotation】
作用:它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。
参数:
例子:
@Autowired
private UtilsService utilsService;
@Resource
位置:【JDK>>rt>>javax>>annotation】
作用:@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
参数:
例子:
@Resource (name= "baseDao" )
private BaseDao baseDao;
@PreAuthorize
位置:【spring-security-core>>org>>springframework>>security>>access>>prepost】
作用:spring security下的,在方法前拦截判断是否有权限
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。
参数:value
例子:
@PreAuthorize(value="isAuthenticated()")//添加登录权限判断,登录才可以调用
@AuthenticationPrincipal
位置:【spring-security-core>>org>>springframework>>security>>core>>annotation】
作用:spring-security使用一个Authentication对象来描述当前用户的相关信息。SecurityContextHolder中持有的是当前用户的SecurityContext,而SecurityContext持有的是代表当前用户相关信息的Authentication的引用。这个Authentication对象不需要我们自己去创建,在与系统交互的过程中,Spring Security会自动为我们创建相应的Authentication对象,然后赋值给当前的SecurityContext。
参数:UserDetails:用户登录信息实体
例子:
public ModelAndView getBaseinfoList(ModelAndView mv, @AuthenticationPrincipal UserDetails userDetails, HttpServletResponse response, HttpServletRequest request) {
...
}
@Profile
位置:【spring-context>>org>>springframework>>context>>annotation】
作用:与maven中的profile很相似,在开发时,不同环境(开发、联调、预发、正式等)所需的配置不同导致,如果每改变一个环境就更改配置不但麻烦(修改代码、重新构建)而且容易出错。Spring提供该方案
参数:
例子:
@Bean
@Profile("dev")
public DataSource embeddedDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.addScript("classpath:dev-data.sql")
.build();
}
@Bean
@Profile("prod")
public DataSource embeddedDataSourceDev() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.addScript("classpath:prod-data.sql")
.build();
}
@Modifying
位置:【spring-data-jpa>>org>>springframework>>data>>jpa>>repository】
作用:jpa 中update 得操作,加@Modifying;与@Query 连用支持 update、delete 等,相当于 @Update 注解
参数:
例子:
@Modifying
@Query(value = "update t_user_msg_count set REWARD_MSG_COUNT = 0 where user_id = ?1", nativeQuery = true)
@Transactional
Void clearRewardMsgByUserId(Long userId);
@Modifying
@Transactional
@Query(value="delete from product_resource_type r where r.product_resource_id=:id ",nativeQuery = true)
int deleteProductResourceType(@Param("id") Integer id);
@Query
位置:【spring-data-jpa>>org>>springframework>>data>>jpa>>repository】
作用:创建查询,可以声明在 Repository 方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是 Spring data 的特有实现
参数:
例子:
@Query(value="select * from product_resource_type t where t.sys_id = :id and t.resource_id = :id1",nativeQuery = true)
ProductResourceType findProductResourceID(@Param("id") Integer id, @Param("id1") Integer id1);
@Param
位置:【spring-data-commons>>org>>springframework>>data>>repository>>query>>spi】
作用:注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中,一般通过#{}的方式
参数:
例子:
public List<user> getUserInformation(@Param("user") User user);
@ComponentScan
位置:【spring-context>>org>>springframework>>context>>annotation>>ComponentScan】
作用:用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。
参数:
例子:
@ComponentScan("com.xxx")
public class ConsumerStarter extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ConsumerStarter.class);
}
public static void main(String[] args) {
new SpringApplicationBuilder(ConsumerStarter.class)
.run(args);
}
}
@Transactional
位置:【spring-tx>>org>>springframework>>transaction>>annotation】
作用:通常情况下我们在需要对一个service方法添加事务时,加上这个注解,如果发生unchecked exception,就会发生rollback,最典型的例子如下。
参数:
例子:
@Transactional
public void innerSave(int i) {
Student student = new Student();
student.setName("test" + i);
studentDao.save(student);
//i=5 会出现异常
int a = 1 / (i - 5);
}
@EnableConfigurationProperties
位置:
作用:@EnableConfigurationProperties 注解的作用是:让使用了 @ConfigurationProperties 注解的类生效,并且将该类注入到 IOC 容器中,交由 IOC 容器进行管理
参数:
例子:
@EnableRabbit
位置:
作用:开启基于注解的RabbitMq
参数:
例子:
@Mapper
位置:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
参数:
例子:
@Mapper
public interface UserDAO {
//代码
}
@MapperScan
位置:【spring-tx>>org>>springframework>>transaction>>annotation】
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,
参数:
例子:
@SpringBootApplication
@MapperScan("com.winter.dao")
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
@EnableDubbo
位置:【org.apache.dubbo>>spring>>context>>annotation】
作用:整合了三个注解@EnableDubboConfig、@DubboComponentScan、@EnableDubboLifecycle。
@EnableDubboConfig引入类DubboConfigConfigurationRegistrar,将用于解析配置相关的类注册到spring容器;
@DubboComponentScan引入类DubboComponentScanRegistrar,用于指定@Service扫描路径;
@EnableDubboLifecycle引入类DubboLifecycleComponentRegistrar,注册了两个监听器到spring容器。
参数:
例子:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDubbo
@ComponentScan("com.xxxx")
public class ConsumerStarter extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ConsumerStarter.class);
}
public static void main(String[] args) {
new SpringApplicationBuilder(ConsumerStarter.class)
.run(args);
}
}
@Bean
位置:【spring-tx>>org>>springframework>>context>>annotation】
作用:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。(和xml配置中的bean标签的作用是一样的);Bean理解为类的代理
一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;
一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。
参数:
例子:
@Bean
public TaskExecutor taskExecutor(){
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor executor =new org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor();
executor.setCorePoolSize(thread.getCorePoolSize());
executor.setMaxPoolSize(thread.getMaxPoolSize());
executor.setQueueCapacity(thread.getQueueCapacity());
executor.setKeepAliveSeconds(thread.getKeepAliveSeconds());
//设置默认线程名称
executor.setThreadNamePrefix("thread-1-");
//设置拒绝策略rejection-policy:当pool到达max size时若处理新任务,CALLER_RUNS:不在新线程执行,在旧有线程执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//等待所有任务结束再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
@Component
作用:把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>
注意:与@Configuration大致相似,但被注解@Configuration的类进行CGLIB代理(动态代理,是基于现有类创建一个子类,并实例化子类对象。在调用动态代理对象方法时,都是先调用子类方法,子类方法中使用方法增强Advice或者拦截器MethodInterceptor处理子类方法调用后,选择性的决定是否执行父类方法,this获取的值会不一样)
@org.springframework.stereotype.Component
public class Component {
public static String url;
@Autowired
public void initConfig(PropertiesUtils propertiesUtils){
url = propertiesUtils.getDemo()+"-123";
}
}
@Configuration
位置:【spring-tx>>org>>springframework>>context>>annotation】
作用:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意:@Configuration不可是final类型;@Configuration不可是匿名类;嵌套的configuration必须是静态类。
参数:
例子1:
//常与@value使用
@Configuration
@Getter
@Setter
public class PropertiesUtils {
@Value("${spring.application.name}")
private String demo;
}
例子2:
@Configuration
@EnableAsync
public class ThreadPoolTaskConfig {
private static final int corePoolSize = 10; // 核心线程数(默认线程数)
private static final int maxPoolSize = 100; // 最大线程数
private static final int keepAliveTime = 10; // 允许线程空闲时间(单位:默认为秒)
private static final int queueCapacity = 200; // 缓冲队列数
private static final String threadNamePrefix = "Async-Service-"; // 线程池名前缀
@Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名
public ThreadPoolTaskExecutor getAsyncExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveTime);
executor.setThreadNamePrefix(threadNamePrefix);
// 线程池对拒绝任务的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化
executor.initialize();
return executor;
}
}
//注意:@Configuration用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
一、用@Configuration加载spring
1.1、@Configuration配置spring并启动spring容器
1.2、@Configuration启动容器+@Bean注册Bean
1.3、@Configuration启动容器+@Component注册Bean
1.4、使用 AnnotationConfigApplicationContext 注册 AppContext 类的两种方法
1.5、配置Web应用程序(web.xml中配置AnnotationConfigApplicationContext)
二、组合多个配置类
2.1、在@configuration中引入spring的xml配置文件
2.2、在@configuration中引入其它注解配置
2.3、@configuration嵌套(嵌套的Configuration必须是静态类)
三、@EnableXXX注解
四、@Profile逻辑组配置
五、使用外部变量
详见-- https://www.cnblogs.com/duanxz/p/7493276.html
@EnableAsync/Async
位置:【spring-tx>>org>>springframework>>schgeduling>>annotation】
作用:使用多线程的时候用,@EnableAsync开始对异步任务的支持,@Async注解来声明一个或多个异步任务,可以加在方法或者类上,加在类上表示这整个类都是使用这个自定义线程池进行操作。详见--https://www.cnblogs.com/hsug/p/13303018.html
参数:
例子:
@Configuration
@EnableAsync
public class ThreadPoolTaskConfig {
private static final int corePoolSize = 10; // 核心线程数(默认线程数)
private static final int maxPoolSize = 100; // 最大线程数
private static final int keepAliveTime = 10; // 允许线程空闲时间(单位:默认为秒)
private static final int queueCapacity = 200; // 缓冲队列数
private static final String threadNamePrefix = "Async-Service-"; // 线程池名前缀
@Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名
public ThreadPoolTaskExecutor getAsyncExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveTime);
executor.setThreadNamePrefix(threadNamePrefix);
// 线程池对拒绝任务的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化
executor.initialize();
return executor;
}
}
@ConfigurationProperties
位置:用以将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解;详见--https://www.cnblogs.com/tian874540961/p/12146467.html
参数:prefix
例子:
@Configuration
@ConfigurationProperties(prefix = "threadpool")
public class Thread {
/**
* 核心线程数
*/
private Integer corePoolSize;
/**
* 最大线程数
*/
private Integer maxPoolSize;
/**
* 队列容量
*/
private Integer queueCapacity;
/**
* 线程活跃时间(秒)
*/
private Integer keepAliveSeconds;
public Integer getCorePoolSize() {
return corePoolSize;
}
public void setCorePoolSize(Integer corePoolSize) {
this.corePoolSize = corePoolSize;
}
public Integer getMaxPoolSize() {
return maxPoolSize;
}
public void setMaxPoolSize(Integer maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
public Integer getQueueCapacity() {
return queueCapacity;
}
public void setQueueCapacity(Integer queueCapacity) {
this.queueCapacity = queueCapacity;
}
public Integer getKeepAliveSeconds() {
return keepAliveSeconds;
}
public void setKeepAliveSeconds(Integer keepAliveSeconds) {
this.keepAliveSeconds = keepAliveSeconds;
}
}








网友评论