zoukankan      html  css  js  c++  java
  • 【Spring】05 注解开发

    环境搭建

    配置ApplicationContext.xml容器文件【半注解实现】

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
    
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:c="http://www.springframework.org/schema/c"
    
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
    
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
    
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
    "
    >
        <context:annotation-config />
    
    
    
    </beans>

    配置注解组件扫描位置

     <context:component-scan base-package="cn.dai" />

    配置之后,会有叶子+放大镜的图标,用于扫描、搜索组件


    @Component注解

    注册Bean不再需要写XML标签

    在类上打上@Component注解,直接在Spring容器中注册为Bean

    package cn.dai.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.stereotype.Component;
    
    /**
     * @author ArkD42
     * @file Spring
     * @create 2020 - 05 - 05 - 8:39
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Component // @Component  将类注册到Spring容器
    // 等价于 <bean id="user" class="cn.dai.pojo.User" />
    public class User {
        private String name;
    }

    测试

    public class AnnotationTest {
    
        @Test
        public void anoTest(){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
            User user = applicationContext.getBean("user", User.class);
            System.out.println(user);
            String name = user.getName();
            System.out.println(name);
        }
    }

    在属性上打上注解,即:使用字段赋值

        @Value("阿伟") // 等同: <property name="name" value="阿伟">
        private String name;

    测试

    这个@Value注解同样对SETTER方法使用,

    这里使用了Lombok就没有代码上的SETTER方法能注解了

        @Value("阿杰")
        public void setName(String name){
            this.name = name;
        }

    @Component的衍生注解

    在Web开发中我们会按照MVC的三层架构分层开发

    Spring分别对这些层的注册使用不同名称的注解,

    其本质的功能都是一样的,注册到Spring容器

      1、Dao层【@Repository】

      2、Service层【@Service】

      3、Controller层【@Controller】

    这四个注解的功能是一样的


    @Scope Bean作用域注解

    一般值就设置:

    Singleton

    Prototype

    单例或者原型这两种情况


     总结:

    XML适用任何配置,编写繁琐

    注解需要XML的约束支持

    最佳实践?

    1、XML管理Bean

    2、属性交给注解完成

    注意注解的约束开启,这样才有效


    全注解配置 

    JavaConfig配置

    现在这个工程是没有写过任何XML容器文件的

    可以看到在包目录中编写另一个config目录

    我编写了一个ApplicationContext,这个类就充当了我们的Spring容器

    @Configuration注解

    被注解的类注册成为Bean容器

    package cn.dai.config;
    
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author ArkD42
     * @file Spring
     * @create 2020 - 05 - 05 - 9:12
     */
    @Configuration
    public class ApplicationContext {
    
    }

    编写一个实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Person {
        private String name;
        private int age;
    }

    @Bean 注解

    将这个类在容器类中注册

    这个注解充当了@Component作用

     @Bean
        public Person person(){
            return  new Person();
        }

    实际测试获取对象

    使用的是new AnnotationConfigApplicationContext(cn.dai.config.ApplicationContext.class)

    将我们的容器类的类对象注入,获取容器实例

    下面获取的参数是容器类中方法的名字和所对应的Bean类的类对象

    public class AnnotationTest {
        @Test
        public void a(){
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(cn.dai.config.ApplicationContext.class);
            Person person = applicationContext.getBean("person", Person.class);
            System.out.println(person);
        }
    }

     @ComponentScan 注解

    或者显示的声明扫描目录

    然后实体类使用@Component

    被扫描进容器类注册

    测试结果还是一样可以

    要注意的是

    使用@Component 被扫描后获取的实例是从Spring中获取的,并非容器类

    使用@Bean 获取的实例,则就是这个注解的方法获取的实例

    并不是同一个对象


     @Import 合并导入注解

    跟XML的导入标签一样,我们可以声明多个容器类,

    然后在其中一个核心总容器类使用@Import把其他容器类导入进来

  • 相关阅读:
    IBM斥资340亿美元收购红帽
    单例模式讨论篇:单例模式与垃圾回收
    Xshell拖拽上传文件插件
    理想的程序员
    Android学习之路
    springboot更改启动logo,佛祖保佑 ,永不宕机 , 永无BUG
    Java多线程实现的四种方式
    IntelliJ IDEA
    Jrebel最新激活破解方式(持续更新)
    PyCharm 2018.2.4永久破解办法
  • 原文地址:https://www.cnblogs.com/mindzone/p/12829444.html
Copyright © 2011-2022 走看看