Java配置是通过@Configuration和@Bean来实现的。
@Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件。
@Bean注解在方法上,声明当前方法的返回值为一个Bean。
package com.shrimpking.test2;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/1/5 21:15
*/
public class FunctionService
{
public String sayHello(String word){
return "Hello " + word + " !";
}
}
此处没有使用@Service声明Bean。
package com.shrimpking.test2;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/1/5 21:16
*/
public class UseFunctionService
{
private FunctionService functionService;
public void setFunctionService(FunctionService functionService)
{
this.functionService = functionService;
}
public String sayHello(String word){
return this.functionService.sayHello(word);
}
}
此处没有使用@Autowired注解注入Bean。
package com.shrimpking.test2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/1/5 21:18
*/
@Configuration
public class JavaConfig
{
@Bean
public FunctionService functionService(){
return new FunctionService();
}
@Bean
public UseFunctionService useFunctionService(){
UseFunctionService useFunctionService = new UseFunctionService();
useFunctionService.setFunctionService(functionService());
return useFunctionService;
}
@Bean
public UseFunctionService useFunctionService(FunctionService functionService){
UseFunctionService useFunctionService = new UseFunctionService();
useFunctionService.setFunctionService(functionService);
return useFunctionService;
}
}
使用@Configuration注解表明当前类是一个配置类,这意味着这个类里可能有0个或者多个@Bean注解,此处没有使用包扫描,是因为所有的Bean都在此类中定义了。
使用@Bean注解声明当前方法FunctionService的返回值是一个Bean,Bean的名称是方法名。
注入FunctionService的Bean时候直接调用functionService()。
另外一种注入的方式,直接将FunctionService作为参数给useFunctionService(),这也是Spring容器提供的极好的功能。在Spring容器中,只要容器中存在某个Bean,就可以在另外一个Bean的声明方法的参数中写入。
package com.shrimpking.test2;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2024/1/5 21:26
*/
public class Main
{
public static void main(String[] args)
{
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(JavaConfig.class);
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
System.out.println(useFunctionService.sayHello(" java config"));
context.close();
}
}