美文网首页
4 注解方式开发bean

4 注解方式开发bean

作者: 错过_16e3 | 来源:发表于2019-03-04 20:27 被阅读0次

    1、将上节课的HelloWorld项目用注解的方式实现

    • Student类采用@Component注解
    package com.spring.annotation;
    
    import org.springframework.stereotype.Component;
    /**
     * 采用注解开发bean
     * @Component 用于类级别注解,标注本类为一个可被Spring容器托管的bean
     */
    @Component
    public class Hello {
        public String getHello(){
            return "Hello World";
        }
    }
    
    
    • HelloWorldApp类,采用@ComponentScan注解
    package com.spring.annotation;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    
    //用于寻找用@componnent注解标注的bean
    @ComponentScan
    public class HelloApp {
        public static void main(String[] args) {
    //        1 通过注解创建上下文对象
            ApplicationContext context=new AnnotationConfigApplicationContext(HelloApp.class);
    //        2 读取bean
            Hello hello=context.getBean(Hello.class);
    //        3 运行
            System.out.println(hello.getHello());
        }
    }
    
    
    • 运行结果

      image

    2、Student和Phone的例子用注解的方法实现

    • Lombok插件的使用
      • 1.Settings->plugins,搜索Lombok,安装,重启IDEA

        image image
      • 注:图片中此前已安装过lombok,所以显示有所不同,安装完需重启idea

      • 2.添加依赖

    <!--lombox依赖-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.10</version>
            </dependency>
    
    
    • 版本号一般是自动生成的,如果不正确视情况修改
    • Phone类
    package com.spring.annotation;
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    //采用注解和Lombok开发的Phone类
    @Component
    @Data
    public class Phone {
        @Value("荣耀v20")
        private  String brand;
    
        @Value("2999.0")
        private double price;
    }
    
    
    • Student类
    package com.spring.annotation;
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Data
    @Component
    public class Student {
        @Value("Tom")
        private  String name;
    
        @Value("20")
        private double age;
    
       // 引用类型,通过@Autowired注入Phone的bean
        @Autowired
        private Phone phone;
    }
    
    
    • StudentApp类
    package com.spring.annotation;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    
    @ComponentScan
    public class StudentApp {
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(StudentApp.class);
            Student student = context.getBean(Student.class);
            System.out.println(student);
    
        }
    }
    
    
    • 添加日志文件log4j.properties
    ##日志输出的级别,以及配置记录方案
    log4j.rootLogger=info,stdout,file
    ###log4j.rootLogger=info, stdout,file
    ##设置日志记录到控制台的方式
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    ##设置日志记录到文件的方式
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=logs/my_log.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    
    
    • 运行结果

      image

    3、深入学习Lombok

    Lombok原理分析与功能实现
    常用的注解:

    • @Data:注解在类上,将类提供的所有属性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法

    • @Setter:注解在类上,为所有属性添加set方法、注解在属性上为该属性提供set方法

    • @Getter:注解在类上,为所有的属性添加get方法、注解在属性上为该属性提供get方法

    • @NotNull:在参数中使用时,如果调用时传了null值,就会抛出空指针异常

    • @Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定

    • @Log作用于类,创建一个log属性

    • @Builder:使用builder模式创建对象

    • @NoArgsConstructor:创建一个无参构造函数

    • @AllArgsConstructor:创建一个全参构造函数

    • @ToStirng:创建一个toString方法

    • @Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。

    • (链式设置属性举例:

    • image
    • @RequiredArgsConstructor:创建对象

    • @UtilityClass:工具类

    • @ExtensionMethod:设置父类

    • @FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。

    • @Cleanup: 关闭流、连接点。

    • @EqualsAndHashCode:重写equals和hashcode方法。

    • @toString:创建toString方法
      更多的请参见:https://projectlombok.org/features/index.html

    相关文章

      网友评论

          本文标题:4 注解方式开发bean

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