Java Spring中注解详解(创建Bean的对象)

简介: Java Spring中注解详解

spring注解(创建Bean的对象)

@Controller     C: SpringMVC框架


@Service      M: service


@Repository    M: MyBatis/SpringJDBC


@Component   JavaBean不属于M或C层,并且需要通过spring创建对象


注意:依赖AOP机制的,引入aop-jar包


1、操作属性   setter   构造方法


    基本类型   +  API  类           @Value(“”)不需要setter

@Component
class Courses1 implements Courses{
    @Value("语文")
    private String name;
    @Override
    public String toString() {
        return "Courses1{" +
                "name='" + name + '\'' +
                '}';
    }
}

2、注意Component后面可以添加id,使用方法和在config配置bean中的id的使用方法相同:

package zj.it.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import zj.it.entity.Teacher;
import zj.it.four_two.Student;
import zj.it.twenty_seven.Hello;
/**
 * Created by Jiang on 2019/3/27
 */
public class Test {
    public static void main(String[] args){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationConfig.xml");
        Couser1 student = (Couser1 ) applicationContext.getBean("stu");
        System.out.println(student);
    }
}


3、如果需要使用list和map,可以直接使用@Autowired注解:

@Autowired
    @Qualifier("one")
    private Book books;

4、上面代码中的Book是一个接口, @Qualifier("one")调用的是接口的一个实现类(Qualifier用来选择要使用的类),one表示实现类的id。Book类如下:

package zj.it.four_two;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
/**
 * Created by Jiang on 2019/4/2
 */
@Component("book")
public interface Book {
    String setName();
}
@Service("one")
class Book1 implements Book{
    @Value("战争中")
    private String name;
    public Book1() {
        System.out.println("安徒生童话");
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String setName() {
        System.out.println("安徒生童话");
        return "你好";
    }
    @Override
    public String toString() {
        return "Book1{" +
                "name='" + name + '\'' +
                '}';
    }
}
@Service("two")
class Book2 implements Book{
    @Value("战争中ssssss")
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public Book2() {
        System.out.println("格林童话");
    }
    @Override
    public String setName() {
        System.out.println("格林童话");
        return "你好啊";
    }
    @Override
    public String toString() {
        return "Book2{" +
                "name='" + name + '\'' +
                '}';
    }
}

5、上述代码测试结果如下:


Student{name='朱江', age=22, book=[Book1{name='战争中'}, Book2{name='战争中ssssss'}], 
bookMap={one=Book1{name='战争中'}, two=Book2{name='战争中ssssss'}}, coursesList=
[Courses1{name='语文'}, Courses1{name='数学'}, Courses1{name='英语'}, Courses1{name='物理'}, 
Courses1{name='化学'}], books=Book1{name='战争中'}, stringSet=[sssss, sssseweerss], 
booksLength=[Book1{name='吱吱吱吱1'}, Book2{name='吱吱吱吱2'}, Book1{name='吱吱吱吱3'}, 
Book2{name='吱吱吱吱4'}], classRooms=ClassRooms{name='一班'}, teachers=Teachers{yid=111111,
 name='朱江水水水水'}}

6、完整Student类代码如下:

package zj.it.four_two;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import zj.it.entity.ClassRoom;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * Created by Jiang on 2019/4/2
 */
@Component("stu")
public class Student {
    @Value("朱江")
    private String name;
    @Value("22")
    private int age;
    private List<Book> book;
    private Map<String, Book> bookMap;
    private List<Courses> coursesList;
    @Autowired
    @Qualifier("one")
    private Book books;
    private Set<String> stringSet;
    private Book[] booksLength;
    private ClassRooms classRooms;
    private Teachers teachers;
    public Student() {
    }
    @Autowired()
    public Student(List<Book> book, Map<String, Book> bookMap,Teachers teachers,ClassRooms classRooms,List<Courses> coursesList) {
        this.book = book;
        this.bookMap = bookMap;
        this.teachers = teachers;
        this.classRooms = classRooms;
        this.coursesList = coursesList;
    }
    public void setBooksLength(Book[] booksLength) {
        this.booksLength = booksLength;
    }
    public void setStringSet(Set<String> stringSet) {
        this.stringSet = stringSet;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", book=" + book +
                ", bookMap=" + bookMap +
                ", coursesList=" + coursesList +
                ", books=" + books +
                ", stringSet=" + stringSet +
                ", booksLength=" + Arrays.toString(booksLength) +
                ", classRooms=" + classRooms +
                ", teachers=" + teachers +
                '}';
    }
}
目录
相关文章
|
8天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
25 0
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
11天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
15天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
41 4
SpringBoot必须掌握的常用注解!
|
16天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
33 1
|
10天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
22 0
|
11天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
5月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
55 2
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
73 1