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