springboot系列五、springboot常⽤注解使⽤说明
⽬录
⼀、controller相关注解
1、@Controller
2、@RespController
3、@RequestMapping
4、@GetMapping
⼆、取值
1、@PathVariable:获取url中的数据
2、@RequestParam:获取请求参数的值
三、启动注解
1、@SpringBootApplication
2、@SpringBootConfiguration
3、@EnableAutoConfiguration
4、@ComponentScan
5、@ConfigurationProperties和@PropertySourceproperties配置⽂件映射到实体bean
6、@EnableConfigurationProperties
7、@ConditionalOnClass
8、@ConditionalOnProperty
9、同类型注解
四、bean注⼊相关
1、@Repository
2、@Service
3、@Scope注解
4、@Entity
5、@Autowired、@Qualifier和@Resource
6、@Component
7、@Bean产⽣⼀个bean的⽅法
8、@Order加载bean的顺序
五、导⼊配置⽂件
1、@ImportResource导⼊xml配置⽂件
2、@Import导⼊配置类
六、事物
1、事务说明
2、使⽤⽰例
3、常⽤配置
4、事务属性
七、mybatis相关
1、@Mapper
2、@MapperScan
⼀、controller相关注解
1、@Controller
控制器,处理http请求。
2、@RespController
Spring4之后新加的注解,原来返回json需要@ResponseBody和@Controller配合。
3、@RequestMapping
配置url映射,⽤于⽅法和controller类上。
4、@GetMapping
注解简写:@RequestMapping(value = "/say",method = RequestMethod.GET)等价于:@GetMapping(value = "/say")⼆、取值
1、@PathVariable:获取url中的数据
⽅式1:
@Controller
@RequestMapping("/User")
public class HelloWorldController {
@RequestMapping("/getUser/{uid}")
public String getUser(@PathVariable("uid")Integer id, Model model) {
System.out.println("id:"+id);
model.addAttribute("userName","⼩明");
model.addAttribute("phone","123456");
return"user";
}
}
访问url:
192.168.1.100:8082/User/getUser/1111
⽅式2:
@Controller
@RequestMapping("/User")
public class HelloWorldController {
@RequestMapping("{uid}/getUser")
public String getUser(@PathVariable("uid")Integer id, Model model) {
System.out.println("id:"+id);
model.addAttribute("userName","⼩明");
model.addAttribute("phone","123456");
return"user";
}
}
访问url:
192.168.1.100:8082/springboot-demo/User/1111/getUser
2、@RequestParam:获取请求参数的值
@Controller
@RequestMapping("/User")
public class HelloWorldController {
@RequestMapping("/getUser")
public String getUser(@RequestParam("uid")Integer id, Model model) {
System.out.println("id:"+id);
model.addAttribute("userName","⼩明");
model.addAttribute("phone","123456");
return"user";
}
}
url:
192.168.1.100:8082/springboot-demo/User/getUser?uid=112
三、启动注解
1、@SpringBootApplication
源码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
....
}
发现@SpringBootApplication是⼀个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。
2、@SpringBootConfiguration
继承⾃@Configuration,⼆者功能也⼀致,标注当前类是配置类,并会将当前类内声明的⼀个或多个以@Bean注解标记的⽅法的实例纳⼊
到srping容器中,并且实例名就是⽅法名。
3、@EnableAutoConfiguration
@EnableAutoConfiguration的作⽤启动⾃动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项⽬的默认配置,⽐如根据spring-boot-starter-web,来判断你的项⽬是否需要添加了webmvc和tomcat,就会⾃动的帮你配置web项⽬中所需要的默认配置。
4、@ComponentScan
扫描当前包及其⼦包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳⼊到spring容器中进⾏管理。是以前
的<context:component-scan>(以前使⽤在xml中使⽤的标签,⽤来扫描包配置的平⾏⽀持)。所以本demo中的User为何会被spring容器管理。
5、@ConfigurationProperties和@PropertySourceproperties配置⽂件映射到实体bean
Spring Boot可使⽤注解的⽅式将⾃定义的properties⽂件映射到实体bean中,⽐如smsConfig.properties⽂件
SmsConfig.java
@Configuration
@ConfigurationProperties(prefix = "sms")
@PropertySource("classpath:/config/smsConfig.properties")
public class SmsConfig {
private String code;
private String msg;
public String getCode() {
return code;
}
public void setCode(String code) {
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
只需要该类被扫描到即可。使⽤@Autowired注⼊。
@Autowired
private SmsConfig smsConfig;
6、@EnableConfigurationProperties
如果是其他⾮扫描路径,在Spring Boot的启动类上⾯加注解
@EnableConfigurationProperties({SmsConfig.class}) 即可,⽤法⼀样。
7、@ConditionalOnClass
当spring中已经加载某个类时该配置⽣效,⽤法:
@ConditionalOnClass({SmsConfig.class})
8、@ConditionalOnProperty
这个注解能够控制某个configuration是否⽣效。具体操作是通过其两个属性name以及havingValue来实现的,其中name⽤来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进⾏⽐较,如果⼀样则返回true;否则返回false。如果返回值为false,则该configuration不⽣效;为true则⽣效。
@Configuration
//如果synchronize在配置⽂件中并且值为true
@ConditionalOnProperty(name = "synchronize", havingValue = "true")
public class SecondDatasourceConfig {
@Bean(name = "SecondDataSource")
@Qualifier("SecondDataSource")
@ConfigurationProperties(prefix = "spring.second.datasource")
public DataSource jwcDataSource() {
ate().build();
}
}
9、同类型注解
1. @ConditionalOnClass : classpath中存在该类时起效
2. @ConditionalOnMissingClass : classpath中不存在该类时起效
3. @ConditionalOnBean : DI容器中存在该类型Bean时起效
4. @ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效
5. @ConditionalOnSingleCandidate : DI容器中该类型Bean只有⼀个或@Primary的只有⼀个时起效
6. @ConditionalOnExpression : SpEL表达式结果为true时
7. @ConditionalOnProperty :参数设置或者值⼀致时起效
8. @ConditionalOnResource :指定的⽂件存在时起效
9. @ConditionalOnJndi :指定的JNDI存在时起效
10. @ConditionalOnJava :指定的Java版本存在时起效
11. @ConditionalOnWebApplication : Web应⽤环境下起效
12. @ConditionalOnNotWebApplication :⾮Web应⽤环境下起效
四、bean注⼊相关
1、@Repository
DAO层注解,DAO层中接⼝继承JpaRepository<T,ID extends Serializable>,需要在adle中引⼊相关jpa的⼀个jar⾃动加载。
2、@Service
@Service是@Component注解的⼀个特例,作⽤在类上
@Service注解作⽤域默认为singleton
使⽤注解配置和类路径扫描时,被@Service注解标注的类会被Spring扫描并注册为Bean
@Service⽤于标注业务层组件,表⽰定义⼀个bean
@Service使⽤时没有传参数,Bean名称默认为当前类的类名,⾸字母⼩写
@Service(“serviceBeanId”)或@Service(value=”serviceBeanId”)使⽤时传参数,使⽤value作为Bean名字
@Service注解使⽤时不传参Bean名默认为当前类名,⾸字母⼩写
@Service注解使⽤时传参Bean名为参数value的值
3、@Scope注解
1. @Scope作⽤在类上和⽅法上
2. @Scope⽤来配置 spring bean 的作⽤域,它标识 bean 的作⽤域
singleton单例模式:Spring 容器中有且只有⼀个Bean实例,只要Spring容器不销毁或退出,该Bean实例就会⼀直存活
prototype原型模式:每次获取Bean的时候会有⼀个新的实例,Spring容器不能对返回Bean实例的整个⽣命周期负责
request模式:request只适⽤于Web程序,每⼀次HTTP请求都会产⽣⼀个新的bean,同时该bean仅在当前HTTP request内有效,当请求结束后,该对象的⽣命周期即告结束
session模式:session只适⽤于Web程序,session作⽤域表⽰该针对每⼀次HTTP请求都会产⽣⼀个新的bean,同时该bean仅在当前HTTP session 内有效
application模式:application只适⽤于Web程序,全局作⽤域
使⽤⽰例:@Service和@Scope注解⼀起使⽤
// 单例
@Service
@Scope("singleton")
public class SingletonScope {
public SingletonScope() {
springboot aop}
}
//原型
@Service
@Scope("prototype")
public class PrototypeScope {
public PrototypeScope() {
}
}
4、@Entity
SpringMVC中model层相当于SpringBoot中的entity层,@Entity注解在实体类(domain层)上⾯。
@Table(name ="数据库表名"),这个注解也注释在实体类上,对应数据库中相应的表。
@Id、@Column注解⽤于标注实体类中的字段,pk字段标注为@Id,其余@Column。
5、@Autowired、@Qualifier和@Resource
1、@Autowired与@Resource都可以⽤来装配bean. 都可以写在字段上,或写在setter⽅法上。
2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使⽤名称装配可以结合@Qualifier注解进⾏使⽤,如下:
@Autowired()
@Qualifier("baseDao")
private BaseDao baseDao;
3、@Resource(这个注解属于J2EE的),默认安照名称进⾏装配,名称可以通过name属性进⾏指
定,如果没有指定name属性,当注解写在字段上时,默认取字段名进⾏按照名称查,如果注解写在setter⽅法上默认取属性名进⾏装配。当不到与名称匹配的bean时才按照类型进⾏装配。但是需要注意的是,如果name属性⼀旦指定,就只会按照名称进⾏装配。 Java代码
@Resource(name="baseDao")
private BaseDao baseDao;
推荐使⽤:@Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起就⽐较优雅。
6、@Component
@Component作⽤在类上
@Component注解作⽤域默认为singleton
使⽤注解配置和类路径扫描时,被@Component注解标注的类会被Spring扫描并注册为Bean
@Component使⽤在不确定哪⼀个层的时候使⽤,可以作⽤在任何层次,把普通pojo实例化到spring容器
不推荐使⽤@Component注解,⽽应该使⽤它的扩展,如@Service、@Repository
7、@Bean产⽣⼀个bean的⽅法
@Bean明确地指⽰了⼀种⽅法,产⽣⼀个bean的⽅法,并且交给Spring容器管理。⽀持别名@Bean("xx-name")
8、@Order加载bean的顺序
加载bean的顺序,按优先级加载,数字越⼩优先级越⾼。
五、导⼊配置⽂件
1、@ImportResource导⼊xml配置⽂件
在Java配置⽂件中引⼊xml配置⽂件,可⽤@ImportResource
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:c="/schema/c"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd">
<bean id="compactDisc"
class="soundsystem.BlankDisc"
c:_0="Sgt. Pepper's Lonely Hearts Club Band"
c:_1="The Beatles">
<constructor-arg>
<list>
<value>Sgt. Pepper's Lonely Hearts Club Band</value>
<value>With a Little Help from My Friends</value>
<value>Lucy in the Sky with Diamonds</value>
<value>Getting Better</value>
<value>Fixing a Hole</value>
<!-- ...other tracks omitted -->
</list>
</constructor-arg>
</bean>
</beans>
使⽤:
package soundsystem;
import t.annotation.Configuration;
import t.annotation.Import;
import t.annotation.ImportResource;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论