美文网首页
spring注解

spring注解

作者: Yluozi | 来源:发表于2021-05-21 13:42 被阅读0次

@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;
    }

}

相关文章

网友评论

      本文标题:spring注解

      本文链接:https://www.haomeiwen.com/subject/txmadltx.html