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 +
                '}';
    }
}
目录
相关文章
|
4天前
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
21 4
|
6天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
29 6
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
2天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
2天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
2天前
|
Java 测试技术 编译器
JAVA注解
JAVA注解
9 0
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
9天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
9天前
|
Java 数据库连接 开发者
浅谈Spring的Bean生命周期
浅谈Spring的Bean生命周期
17 1
|
10天前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。