SpringBoot的注解@Autowired、@Component、@Controller、@SpringBootApplication等

递归学习之四
SpringBoot的注解@Autowired、@Component、@Controller、@SpringBootApplication等_第1张图片

一、Bean注入相关的注解:

1.@Autowired注解

autowired有四种模式,byName,byType,constructor,autodetect
其中@Autowired注解使用的是byType方式的,byType方式是根据属性类型在容器中寻找bean类。
举个栗子:拿这个栗子分析

@Autowired
SchoolService schoolService;

具体做的事情:
1.Spring会先去容器中去寻找SchoolService类型的bean(先不扫描schoolService字段)
2.若找不到一个bean,会抛出异常(可以通过设置required=false)为不抛出异常
3.若找到一个SchoolService类型的bean,自动匹配,并把bean装配到schoolService中
4.若SchoolService类型的bean有多个,则扫描后面的schoolService字段进行名字匹配,
匹配成功后将bean装配到schoolService中。
一个可能会用到的注解@Qualifier:寻找指定名称的bean:baseDao

@Autowired() 
@Qualifier("baseDao") 
private BaseDao baseDao; 

2.@Resource注解

使用方法:默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称相配的bean时才会按照类型进行装配。如果指定了name,就会按照name来找bean。

@Resource(name="baseDao")
 private BaseDao baseDao;

3.@Service

@Service是@Component注解的一个特例,作用在类上。其作用域默认为singleton。使用注解配置和类路径扫描时,被@Service注解标注的类会被Spring扫描并注册为Bean。@Service用于标注业务层组件。如果@Service没有传递参数是,bean名称默认为当前类的类名,首字母小写,如果指定了name,注册的bean名称就为指定名称。

@Service(value="schoolservice")
@Service("schoolservice")

4.@Scope注解

作用在类和方法上,用来配置spring bean的作用域。

  • singleton单例模式:Spring容器中有且只有一个Bean实例,只要Spring容器不销毁或者退出,该bean实例就会一直存在
  • prototype原型模式:每次获取Bean的时候会有一个新的实例,Spring容器不能对返回Bean实例的整个生命周期负责。
  • 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(){
      }
}

5.@Entity

@Entity注解在实体类(domain层上)
@Table(name = “数据库表名”),这个注解也注释在实体类上,对应数据库中相应的表
@Id、@Column注解用于标注实体类中的字段,主键字段标注为@Id、其余为@Column。

6.@Component

  • @Component作用在类上
  • @Component注解作用域默认为singleton
  • 使用注解配置和类路径扫描时,被@Component注解标注的类会被Spring扫描并注册为Bean
  • @Component使用不确定在哪一个层的时候使用,可以被作用在任何层次,把普通pojo实例化到Spring容器
  • 不推荐使用@Component注解,而应该使用他的扩展,如@Service、@Repository

7.@Bean产生一个bean的方法

配合@Configuration使用,@Configuration写在类上,相当于xml里的,@Bean写在方法上,相当于,表示一个bean的方法

8.@Order 加载顺序

通过该注解指定加载的顺序,优先级高的先加载,数字越小的优先级越高

二.controller相关的注解

1.@Controller

被@Controller标注的类为一个控制器,用于处理http请求

2.@RestController

相当于@ResponseBody和@Controller的配合。@ResponseBody告诉控制器该类的方法返回对象都会被自动序列化为JSON,并且传回HttpResponse这个对象。

3.@RequestMapping

用来配置url隐射,写在controller类和其方法上

4.@GetMappping

是@RequestMapping(value = “/say”,method = RequestMethod.GET)等价于@GetMapping(value = “/say”)

三、取值

1.@PathVariable:获取url中的数据

在@RequestMapping注解中用{}来表明它的变量部分
@RequestMapping(value = “/user/{username}”)
这个{username}就是我们定义的变量规则,username是变量的名字,这个Url路由可以匹配以下任意Url
/user/Tom
/user/Mary
/user/Jimmy
也可以写正则表达式匹配
@RequestMapping(value = “/user/{username:[a-zA-Z0-9]+}/blog/{blogId}}”)

@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:http://192.168.1.100:8082/springboot-demo/User/1111/getUser

2.@RequestParam:获取请求参数的值

写在方法的参数前,表示这个参数是url中传递过来的参数。
url:http://192.168.1.100:8082/springboot-demo/User/getUser?uid=112&q=web
uid=112&q=web就是请求参数,不同参数之间使用&分隔。可以获取多个参数。

@RequestMapping(value="/user")
	public String getUserBlog(@RequestParam(value="id") int blogId) {
		return "blogId="+blogId;
	}

四、启动注解

1.@SpringBootApplication

是一个复合注解,包括@ComponentScan和@SpringBootConfiguration @EnableAutoConfiguration

2.@SpringBootConfiguration

继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或者多个@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

3.@EnableAutoConfiguration

该注解的作用为启动自动的配置,SpringBoot根据你添加的jar包来配置你项目的默认配置。比如根据spring-boot-starter-web,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。

4.@ComponentScan

扫描当前包以及其子包下被@Component,@Controller,@Service,@Repository等注解标注的类并纳入到spring容器中进行管理。

五、导入配置文件

1.@ImportResource导入xml文件

在Java配置文件中引入xml配置文件,可用@ImportResource

2.@Import导入配置类

功能类似于XML配置,用来导入配置类,可以导入带有@Configuration注解的配置类或者实现了ImportSelector/ImportBeanDefinitionResgister,或者导入普通的pojo(Spring会将其注册称为Spring bean)

@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

六、事务相关

编程式事务管理:使用TransactionTemplate或者使用底层的PlatformTransactionManager
声明式事务:建立在AOP之上,其本质是对方法前后进行拦截,通过@Transactional就可以进行事务操作,更快捷而且简单。

注解:@Transactional
具体配置可以参见:https://blog.csdn.net/chen_yuxi/article/details/98495210

七、日志相关

@Slf4j
如果是自己写日志需要:

private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

每次写新的类,就需要重新写logger
此时可以使用@Slf4j注解
先需要在pom文件中引入lombok

        
            org.projectlombok
            lombok
            true
        

然后在方法中直接使用log.info()等等
如果注解@Slf4j注入后找不到变量log,需要在IDEA中安装插件lombok

参考资料:https://www.cnblogs.com/wangzhuxing/p/10141428.html#_label3_1

你可能感兴趣的:(java,SpringBoot,注解)