使用注解装配bean

注解

spring容器对于Bean的创建和对象属性的依赖注入提供了注解的支持,让我们在开发中能够更加便捷的实现对象的创建和对象属性的依赖注入

  • 对于bean的创建,spring提供了如下4个注解的支持:
    1.@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符。
    2.@Repository:@Component扩展,被@Repository注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;
    3.@Service:@Component扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;
    4.@Controller:@Component扩展,被@Controller注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component相同.

关于Lombok

lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,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对象。
    @RequiredArgsConstructor:创建对象
    @UtilityClass:工具类
    @ExtensionMethod:设置父类
    @FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。
    @Cleanup: 关闭流、连接点。
    @EqualsAndHashCode:重写equals和hashcode方法。
    @toString:创建toString方法。

  • Lombok的使用
    1.Settings->plugins,搜索Lombok,安装,重启IDEA
    2.在pom.xml中添加依赖

 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>

注解实现例子

  • spring容器对于bean创建的四个注解是等效的,我们只要使用@Component注解来实现就可以了

  • 使用@Data注解,lombok帮我们生成了getter和setter和构造方法等方法

  • 练习
    1.Student.class

package com.spring.annotation;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
@Data
public class Student {
    @Value("Jay")
    private String name;
    @Value("20")
    private int age;
    //使用@Autowired注入一个Phone类型的bean
    private Phone phone;//引用类型
}

2.Phone.class

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("iphoneX")
   private String brand;

    @Value("666.66")
   private double price;
}

3.StudentApp.class

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.print(student);
    }
}

4.运行结果

Student{name='Jay', age=20, phone=Phone{pp='HuaWei', price=3000}}
Process finished with exit code 0
  • 可以通过view ->Tool Windows -> Structure或者快捷键Alt+7来查看Lombok帮我们生成的getter、setter和构造方法等方法



©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容