美文网首页
Spring中的注解

Spring中的注解

作者: 鸡龙 | 来源:发表于2019-07-15 17:56 被阅读0次

    在对Spring系列进行学习时,会在简化xml的同时,遇到一些注解,一开始,我只是对这些注解进行搜索和短暂的记忆,主要在理解程序上,但后来发现,必须对一些注解进行整合理解,下面是我在各网站中搜索到的注解给于的自己的理解。

    一、@SpringBootApplication

    @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置之和。

    @Configuration

    等同于spring的XML配置文件

    @EnableAutoConfiguration

    这个注解是是Springboot根据我们所引入的jar包自动配置的,假设我们有自己的配置类则会覆盖

    @ComponentScan

    是告诉springboot进行包扫描的,同xml中下行代码,就是对controller进行包扫描。

    <context:component-scan base-package="controller"/>
    

    1、搭配 @ImportResource 注解

    当有使用到@Configuration或@SpringBootApplication注解时,实际上是用注解代替了xml的加载,若还想加载另外的xml文件时,就可以使用@ImportResource注解,如下代码。

    @SpringBootApplication
    @RestController
    @ImportResource("classpath:consumer.xml")
    public class Client {
        @Autowired
        SayService sayService;
        @RequestMapping("/hello")
        public String say(@RequestParam ("name") String name) {
            return sayService.say(name);
        }
        public static void main(String[] args) throws Exception{
            ConfigurableApplicationContext context = SpringApplication.run(Client.class, args);
        }
    }
    

    2、搭配 @Bean 注解

    spring中,配置bean的时通常会在xml中编写<bean>与<property>标签,例如下列代码

    <beans>
        <bean id="course" class="demo.Course">
            <property name="module" ref="module"/>
        </bean>
        <bean id="module" class="demo.Module">
            <property name="assignment" ref="assignment"/>
        </bean>
        <bean id="assignment" class="demo.Assignment" />
    </beans>
    

    代码中定义了三个bean,course中包含参数有module,module中参数有assignment,形成的二重嵌套bean。如果现在我需要将xml中的定义删除,使用configuration注解

    那么在configuration注解中的类应该为

    @Configuration
    public class AppContext {
        @Bean
        public Course course() {
            Course course = new Course();
            course.setModule(module());
            return course;
        }
     
    /**
     *实现了bean的嵌套注入
    **/
        @Bean
        public Module module() {
            Module module = new Module();
            module.setAssignment(assignment());
            return module;
        }
    
        @Bean
        public Assignment assignment() {
            return new Assignment();
        }
    }
    

    如上代码,我们将@Configuration注解写在类前,再将@Bean注解写在方法前,方法名即为bean的id。

    二、@Autowired

    该注解可以对标注对象进行自动装配,不仅仅可以对变量,也可以对方法、构造函数进行装配,下代码为对成员变量进行注入例

    //接口类
    public interface People{
        
        void work();
    }
    
    //实现类
    @Repository
    public class Student implements People{
        @Override
        public void work() {
            System.out.println("do homework");
        }
    }
    
    //测试类
    @Service
    public class UserService {
        @Autowired
        private People people;
        public void work(){
            people.work();
        }
    }
    

    @Autowired对接口类people进行自动装配,运行后people会和他的实现类自动装配,控制台上会显示do homework。

    1、@Qualifier

    正如上@Autowired的例子所示,当接口只有一个实现类的时候,我们可以使用自动装配,那么,如果拥有多个实现类的时候,标注该怎么选择装配呢,那就是使用@Qualifier进行选择了,在上例中,增加多一个people实现接口类,如下代码。

    @Repository
    public class Teacher implements People{
        @Override
        public void work() {
            System.out.println("do housework");
        }
    }
    

    这时,我们只有修改测试类的代码,就能正确的装配teacher类上。

    //测试类
    @Service
    public class UserService {
        @Autowired
        @Qualifier("teacher")
        private People people;
        public void work(){
            people.work();
        }
    }
    

    三、bean类注解

    1、@Component

    2、@Repository

    3、@Service

    4、@Controller

    这四种注解其实都没什么不同,只是各自运用的层不一样,@Component是运用在控制层action,@Service运用在业务层server,@Repository是运用在持久层dao,@Component可注解不确定层。
    如果注解中含有name属性@Component("beanname"),就会将这个name值取为bean的名字。

    用@Scope注解能定义这个bean的作用域

    四、SpringMVC注解

    @RequestMapping

    表示将该控制器去处理某个url中的请求,将一个地址请求映射到该方法中。

    @RequestParam

    用在方法的参数前,进行前端参数与后台参数名字不一的映射

    五、JPA注解

    @Entity

    标注实体类

    @Table

    与Entity联用,说明该bean连接的是数据库的哪张表,@Table(name = "",catalog = "",schema = "" ) 中name填表名,catalog填数据库名,schema填用户名。

    @Id

    表示该属性为主键。可标注在getter方法前

    @Column

    映射成员到关系表中的某一列

    @GeneratedValue

    标注主键的生成策略@GeneratedValue(strategy=)参数可以为

    GenrationType.Auto.

    GenrationType.identity

    GenrationType.sequrnce

    GenrationType.table

    参考文章

    史上最全的springboot注解-随风飘扬

    springboot注解大全-浩瀚星空

    spring常用注解

    @Autowired用法详解

    @Autowired的几种注入方式

    Spring注解@Repository、@Service、@Controller、@Component

    @Id 和 @GeneratedValue 注解详解

    相关文章

      网友评论

          本文标题:Spring中的注解

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