Gow*_*imi 1 java spring spring-annotations
我正在使用一个简单的 spring 应用程序来检查 @Configuration 和 @Bean(仅限基于 java 的配置),该程序可以同时使用 @Configuration 和不使用它。所以是否有必要拥有它。
这是我的代码,
学生.java
package com.cg.spring;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
教师.java
package com.cg.spring;
public class Faculty {
private int empId;
private String name;
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Faculty [empId=" + empId + ", name=" + name + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
配置文件
package com.cg.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Bean
public Student stu()
{
return new Student();
}
@Bean
public Faculty fac()
{
return new Faculty();
}}
Run Code Online (Sandbox Code Playgroud)
客户端.java
package com.cg.spring;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context=new
AnnotationConfigApplicationContext(MyConfig.class);
Student stu=(Student)context.getBean(Student.class);
Faculty fac=(Faculty)context.getBean(Faculty.class);
stu.setName("ajay");
stu.setId(101);
System.out.println(stu);
fac.setEmpId(202);
fac.setName("Kiran");
System.out.println(fac);
}}
Run Code Online (Sandbox Code Playgroud)
有或没有@Configuration 的输出是一样的
Student [id=101, name=ajay]
Faculty [empId=202, name=Kiran]
Run Code Online (Sandbox Code Playgroud)
即使尝试过自动装配,它也可以在没有 @Configuration 的情况下工作
学生.java
package com.cg.spring;
import org.springframework.beans.factory.annotation.Autowired;
public class Student {
private int id;
private String name;
@Autowired
private Faculty faculty;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Faculty getFaculty() {
return faculty;
}
public void setFaculty(Faculty faculty) {
this.faculty = faculty;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}}
Run Code Online (Sandbox Code Playgroud)
客户端.java
package com.cg.spring;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context=new
AnnotationConfigApplicationContext(MyConfig.class);
Student stu=(Student)context.getBean(Student.class);
Faculty fac=(Faculty)context.getBean(Faculty.class);
stu.setName("ajay");
stu.setId(101);
System.out.println(stu);
fac.setEmpId(202);
fac.setName("Kiran");
System.out.println(fac);
stu.setFaculty(fac);
System.out.println(stu.getFaculty());
}}
Run Code Online (Sandbox Code Playgroud)
在 Spring 中使用基于 Java 的配置时,您基本上有 2 个选项(正如您已经注意到的)。您可以选择使用来注释一个类,@Configuration并且可以将所有带@Bean注释的方法作为 bean 使用。但是,您也可以在没有@Configuration注释的情况下执行此操作。后者被称为所谓的精简模式。
当使用@Configuration类时,定义在那里的 bean 是常规的 Spring bean,当从另一个调用一个方法时,这将始终导致 bean 的相同实例。Spring 检测@Configuration类并以一种非常特殊的方式处理它们(它将为这些类创建一个代理)。
使用精简模式时,@Bean方法基本上无非是工厂方法,尽管它们参与(部分)Spring Beans 的生命周期。调用它们时,每次调用都会为您提供一个新 bean。这意味着,每次调用方法时,bean 之间的依赖关系都会为您提供新实例。
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |