共计 7230 个字符,预计需要花费 19 分钟才能阅读完成。
JAVA 开发罕用框架注解与作用
一起交换:CN.ITLTT.COM
Spring 全家桶
申明 Bean
@Component
组件,没有明确的角色。@Service
在业务逻辑层应用 ->Service 层。[email protected]
在数据拜访层应用 ->Dao 层。@Controller
在展示层应用,控制器的申明。
注入 Bean
@Autowired
由 Spring 提供,依据类型进行主动拆卸,如果组合@Qualifier
应用将按名称进行拆卸。@Inject
由JSR-330
提供应用时须要导入javax.inject.Inject
实现注入同样是依据类型进行主动拆卸,如果须要按名称进行拆卸,则须要配合@Named
。@Resource
由JSR-250
提供,应用须要导入javax.annotation
,依据名称进行主动拆卸的,个别会指定一个name
属性。
申明性能
@Transactional
申明事务@Cacheable
申明缓存
配置相干
@Configuration
申明以后类为配置类。@Bean
注解在办法上,申明以后办法的返回值为一个bean
。@ComponentScan
用于对Component
进行扫描 -> 自定义门路。@WishlyConfiguration
为@Configuration
与@ComponentScan
的组合注解,能够代替这两个注解。
AOP 相干
@Aspect
申明一个切面。@After
在办法执行之后执行。@Before
在办法执行之前执行。@Around
在办法执行之前与之后都执行。@PointCut
申明切点。
@Bean 的属性反对
@Scope
设置 Spring
新建 Bean
的模式,可抉择包含如下:
Singleton
单例, 一个Spring
容器中只有一个bean
实例,默认模式。Protetype
每次调用新建一个bean
。Request web
我的项目中,给每个http request
新建一个bean
。Session web
我的项目中,给每个http session
新建一个bean
。GlobalSession
(给每一个global http session
新建一个Bean
实例。
Class 生命周期相干
@PostConstruct
由JSR-250
提供,在类的构造函数执行完之后执行,等价于xml
配置文件中bean
的initMethod
。@PreDestory
由JSR-250
提供,在Bean
销毁之前执行。
配置项注入
@Value
为属性注入值,反对如下形式的注入:
- 一般字符
@Value(“JanYork”)
。- 操作系统属性
@Value("#{systemProperties[‘os.name’]}")
。- 表达式后果
@Value("#{ T(java.lang.Math).random() * 100}")
。- 其它
bean
属性@Value("#{domeClass.name}")
。- 文件资源
@Value(“classpath:cn/janyork/demo.txt”)
。- 网站资源
@Value(“https://ideaopen.cn”)
。- 配置文件属性
@Value("${book.name}")
。
注入配置文件@PropertySource(“classpath:cn/janyork/dev.propertie”)
也能够读取 yml
文件配置。
开发环境配置
@Profile
通过设定Environment
的ActiveProfiles
来设定以后context
须要应用的配置环境。
@Conditional
依据代码中设置的条件装载不同的bean
,包含一系列的注解。
@ConditionalOnBean
存在bean
。@ConditionalOnMissingBean
不存在bean
。@ConditionalOnClass
存在某个类。@ConditionalOnMissingClass
不存在某个类。@ConditionalOnProperty(prefix =“jan”, name =“york”, havingValue =“token”)
当存在配置文件中以jan
为前缀的属性,属性名称为york
,而后它的值为token
时才会实例化一个类。@ConditionalOnProperty(prefix =“jan”, name =“york”, havingValue =“counter”, matchIfMissing = true)
如果所有的都不满足的话就抉择counter
为默认实现。@ConditionalOnJava
如果是Java
利用。@ConditionalOnWebApplication
如果是Web
利用。
异步注解
@Async
在理论执行的bean
办法应用该注解来申明其是一个异步工作。
定时工作
@Scheduled
来申明这是一个工作,包含cron
、fixDelay
、fixRate
等类型。
开启某些性能
@EnableAspectJAutoProxy
开启对AspectJ
主动代理的反对。@EnableAsync
开启异步办法的反对。@EnableScheduling
开启打算工作的反对。@EnableWebMvc
开启Web MVC
的配置反对。@EnableConfigurationProperties
开启对@ConfigurationProperties
注解配置Bean
的反对。@EnableJpaRepositories
开启对SpringData JPA Repository
的反对。@EnableTransactionManagement
开启注解式事务的反对。@EnableCaching
开启注解式的缓存反对。
测试相干
@RunWith Spring
中通常用于对JUnit
的反对。@ContextConfiguration
用来加载配置ApplicationContext
。@Test
用于单元测试。
MVC 相干
@RequestMapping
用于映射Web
申请,包含拜访门路和参数。ResponseBody
反对将返回值放在response
内,而不是一个页面。@PathVariable
用于接管门路参数。@RestController
该注解为一个组合注解,相当于@Controller
和@ResponseBody
的组合,注解在类上,意味着,该Controller
的所有办法都默认加上了@ResponseBody
。@ControllerAdvice
通过该注解,咱们能够将对于控制器的全局配置搁置在同一个地位,注解了@Controller
的类的办法可应用@ExceptionHandler
、@InitBinder
、@ModelAttribute
注解到办法上,
这对所有注解了@RequestMapping
的控制器内的办法无效。@ExceptionHandler
用于全局解决控制器里的异样。@InitBinder
用来设置WebDataBinder
,WebDataBinder
用来主动绑定前台申请参数到Model
中。@ModelAttribute
原本的作用是绑定键值对到Model
里,在@ControllerAdvice
中是让全局的@RequestMapping
都能取得在此处设置的键值对。
Boot 相干
@EnableAutoConfiguration
主动载入应用程序所需的所有Bean
。该注解组合了@Import
注解,@Import
注解导入了EnableAutoCofigurationImportSelector
类,它应用SpringFactoriesLoader.loaderFactoryNames
办法来扫描具备META-INF/spring.factories
文件的jar
包。而spring.factories
里申明了有哪些主动配置
+@SpingBootApplication
SpringBoot
的外围注解,次要目标是开启主动配置。它也是一个组合注解,次要组合了@Configurer
,@EnableAutoConfiguration
(外围)和@ComponentScan
。能够通过@SpringBootApplication(exclude={想要敞开的主动配置的类名.class})
来敞开特定的主动配置。@ImportResource
加载xml
配置的。@AutoConfigureAfter
在指定的主动配置类之后再配置。
MyBatis
SQL 语句映射
@Insert
实现新增性能。
@Select
实现查问性能。
@SelectKey
插入后,获取 id 的值。
@Insert
实现插入性能。
@Update
实现更新性能。
@Delete
实现删除性能。
后果集映射
@Result
、@Results
、@ResultMap
是后果集映射的三大注解。
@Results
各个属性的含意:
id
为以后后果集申明惟一标识,value
值为后果集映射关系,@Result
代表一个字段的映射关系,column
指定数据库字段的名称,property
指定实体类属性的名称,jdbcType
数据库字段类型,@Result
里的id
值为true
表明主键,默认false
。应用
@ResultMap
来援用映射后果集,其中value
可省略。
关系映射
@one
用于一对一关系映射。
@many
用于一对多关系映射。
MyBatisPlus
请看官网文档。
Lombok
@Getter
、@Setter
-> 主动产生getter/setter
。@ToString
-> 主动重写toString()
办法,会印出所有变量。@EqualsAndHashCode
-> 主动生成equals(Object other)
和hashcode()
办法,包含所有非动态变量和非transient
的变量。
- @NoArgsConstructor、@AllArgsConstructor,、@RequiredArgsConstructor
这三个很像,都是在主动生成该类的结构器,差异只在生成的结构器的参数不一样而已。
@NoArgsConstructor
生成一个没有参数的结构器。@AllArgsConstructor
生成一个蕴含所有参数的结构器。@RequiredArgsConstructor
生成一个蕴含 “ 特定参数 ” 的结构器,特定参数指的是那些有加上 final 修饰词的变量们。
留神:
这里留神一个
Java
的小坑,当咱们没有指定结构器时,Java
编译器会帮咱们主动生成一个没有任何参数的结构器给该类,然而如果咱们本人写了结构器之后,Java
就不会主动帮咱们补上那个无参数的结构器了。然而很多中央(像是
Spring Data JPA
),会须要每个类都肯定要有一个无参数的结构器,所以你在加上@AllArgsConstructor
时,肯定要补上@NoArgsConstrcutor
,不然会有各种坑等着你。
@Data
:整合包,只有加了 @Data
这个注解,等于同时加了以下注解。
@Getter
/@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
@Value
:整合包,然而他会把所有的变量都设成 final
的,其余的就跟 @Data
一样,等于同时加了以下注解。
@Getter
(没有setter
)@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
@Builder
:主动生成流式 set
值写法,从此之后再也不必写一堆 setter
了。
留神,尽管只有加上
@Builder
注解,咱们就可能用流式写法疾速设定对象的值,然而setter
还是必须要写不能省略的,因为Spring
或是其余框架有很多中央都会用到对象的getter/setter
对他们取值 / 赋值所以通常是
@Data
和@Builder
会一起用在同个类上,既不便咱们流式写代码,也不便框架做事。
@Slf4j
:主动生成该类的 log
动态常量,要打日志就能够间接打,不必再手动 new log
动态常量了。
除了
@Slf4j
之外,lombok
也提供其余日志框架的变种注解能够用,像是@Log
、@Log4j
… 等,他们都是帮咱们创立一个动态常量log
,只是应用的库不一样而已。
@Log // 对应的 log 语句如下
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j // 对应的 log 语句如下
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
SpringBoot
默认反对的就是slf4j + logback
的日志框架,所以也不必再多做啥设定,间接就能够用在SpringBoot project
上,log
系列注解最罕用的就是@Slf4j
。
Shiro
@RequiresAuthentication
验证用户是否登录,等同于办法subject.isAuthenticated()
后果为true
时。
@RequiresUser
验证用户是否被记忆,user 有两种含意:
- 一种是胜利登录的(
subject.isAuthenticated()
后果为true
)。- 另外一种是被记忆的(
subject.isRemembered()
后果为true
)。
@RequiresGuest
验证是否是一个guest
的申请,与@RequiresUser
齐全相同。换言之,RequiresUser == !RequiresGuest
。此时subject.getPrincipal()
后果为null
。
@RequiresRoles
例如:
@RequiresRoles("JanYork");
void someMethod();
如果 subject
中有 JanYork
角色才能够拜访办法someMethod
。如果没有这个权限则会抛出异样AuthorizationException
。
@RequiresPermissions
例如:
@RequiresPermissions({"file:read","write:aFile.txt"})
void someMethod();
要求 subject 中必须同时含有 file:read
和write:aFile.txt
的权限能力执行办法someMethod()
。否则抛出异样AuthorizationException
。
SpringSecurity
@Secured
:
办法级别的权限认证,只有被该注解指定的角色能力拜访该办法。
应用该注解须要开启注解性能,在配置类或者启动类上增加以下注解。
@EnableGlobalMethodSecurity(securedEnabled=true)
在 controller
办法上增加 @Secured
注解演示:
@GetMapping("user")
// 设置只有这两种角色能力拜访这个办法
@Secured({"ROLE_admin","ROLE_admin_Pro"})
public String getUser() {return ".......";}
此时如果不是这两个角色其中之一拜访申请将被回绝。
@PreAuthorize
:
进入办法前的权限验证,同时也反对表达式的访问控制
要想应用该注解须要在
@EnableGlobalMethodSecurity
注解上增加prePostEnabled = true
属性
在 controller
办法上增加 @PreAuthorize
注解演示:
@GetMapping("user")
@PreAuthorize("hasAuthority('admin')")
public String getUser() {return ".......";}
此时如果不具备 manager 权限的拜访将会被回绝。
多个条件同时满足能够这样:
@PreAuthorize("hasAuthority('admin') and hasRole('admin_Pro')")
如果不能同时满足这两个条件,那么这个办法将不能拜访。
@PostAuthorize
:
同下面的注解一样,要开启此注解的性能须要在
@EnableGlobalMethodSecurity
注解上增加prePostEnabled = true
属性。
@PostAuthorize
注解的应用频率并不高,在办法执行之后再进行权限验证,适宜验证带有返回值的权限。
@PostFilter
:
在权限验证过后对数据进行过滤。
@PreFilter
:
进入控制器之前对数据进行过滤。
Spring Cache
@EnableCaching
开启 Spring Cache
框架反对。解析对应的注解,实现缓存读写访问。
@CacheConfig
缓存配置,能够配置以后类型中所用缓存注解的通用信息。
示例:配置当类前所有缓存注解的缓存前缀。
@CacheConfig(cacheNames = "cache:prefix")
@Cacheable
示意要对办法返回值进行缓存。
蕴含属性:
cacheNames
:缓存key
前缀名字。key
:缓存key
后缀。condition
:SpringEL
表达式,后果为true
,缓存数据到redis
。后果为false
,不缓存数据到redis
。unless
:SpringEL
表达式,后果为false
,缓存数据到redis
。后果为true
,不缓存数据到redis
。
@CacheEvict
淘汰缓存注解。
蕴含属性:
allEntries
代表是否删除cacheNames
对应的全副的缓存。默认false
,可选true
。- 注解属性和
Cacheable
类似。
@CachePut
更新缓存,如果 key
存在笼罩缓存数据。key
不存在,新增数据到缓存。
注解属性:跟
@Cacheable
类似。
完结
全篇完,其余注解请自行理解。