之前用spring的时候,只知道使用xml的方式,和使用注解的方式,却一直不知道在spring中,还可以使用Java类的方式进行配置。使用Java类的方式,就可以取代xml和注解。使用Java配置是Spring4版本的推荐的配置方式,在spring boot中得到了很广泛的应用,也是spring boot推荐的配置方式。
今天大概学习了一下,怎么使用java配置的方式对spring进行配置来使用以来注入功能。
首先我们演示使用注解的方式配置spring,注解的一些功能全部以注释的形式展示。Spring容器类选用AnnotationConfigApplicationContext。
- 功能类1,FunctionService
package site.wangxin520.springstudy.dependency.injection; import org.springframework.stereotype.Service; //使用@service注解声明当前的类,是spring管理的一个Bean //可以根据需要,选择@Component @Servie @Repository @Controller @Service public class FunctionService { /** * 返回一个字符串,在参数字符串前面加入hello,拼成一个新字符串 * @param word * @return */ public String sayHallo(String word){ return "hello "+word+" !"; } }
- 功能类2,UseFunctionService
package site.wangxin520.springstudy.dependency.injection; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserFuctionService { //@Autowired是自动注入的注解,将实例化好的FunctionService类注入到本类中的属性。 @Autowired FunctionService functionService; public String sayHello(String word){ return functionService.sayHallo(word); } }
- 配置类DiConfig
package site.wangxin520.springstudy.dependency.injection; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * 配置类 * @author wangXgnaw * */ @Configuration//声明当前类是一个配置类 @ComponentScan("site.wangxin520.springstudy")//相当于xml中配置到 扫描包 public class DiConfig { }
- Test测试类
package site.wangxin520.springstudy.dependency.injection; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class); UserFuctionService userFuctionService = context.getBean(UserFuctionService.class); String sayHello = userFuctionService.sayHello("小帅哥,快来玩呀"); System.out.println(sayHello); } }
- 控制台输出为
完全可以运行,而本例子中,没有配置任何xml文件。
下面介绍另一种方式,不在类上面使用注解,而直接使用Java配置。
同样,还是上面的列子,不过在新例子中,去掉了@Service和@AutoWired注解
- FunctionService功能类1
package site.wangxin520.springstudy.javaconf; public class FunctionService { public String sayHallo(String word){ return "hello "+word+" !"; } }
- UserFunctionService功能类2
package site.wangxin520.springstudy.javaconf; public class UserFuctionService { FunctionService functionService; public void setFunctionService(FunctionService functionService) { this.functionService = functionService; } public String sayHello(String word) { return functionService.sayHallo(word); } }
- JavaConfig
package site.wangxin520.springstudy.javaconf; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration //这里注意的是,没有使用包扫描的注解 public class JavaConfig { @Bean//使用Bean注解声明当前方法的返回值是一个Bean,名称就是方法名 public FunctionService functionService(){ return new FunctionService(); } @Bean public UserFuctionService userFuctionService(){ //当使用userFunctionService时候,就会调用这个里面的方法去获取bean UserFuctionService userFuctionService=new UserFuctionService(); userFuctionService.setFunctionService(functionService()); return userFuctionService; } @Bean//这是另外一种注入的方式,直接使用参数注入的方式 public UserFuctionService userFuctionService(FunctionService functionService){ UserFuctionService userFuctionService=new UserFuctionService(); userFuctionService.setFunctionService(functionService()); return userFuctionService; } }
- Test
package site.wangxin520.springstudy.javaconf; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class); UserFuctionService userFuctionService = context.getBean(UserFuctionService.class); String sayHello = userFuctionService.sayHello("小帅哥,快来玩呀"); System.out.println(sayHello); } }
- 控制台输出
表示,这个还没有xml方便,不喜欢。