使用Groovy进行Spring依赖注入

为什么选择Groovy?

传统的依赖注入是XML,对我而言,可读性太差,太不美观,强烈地想换一个方式进行依赖注入,Groovy作为XML的替代方案,在Spring4之后被引入,是基于JVM的一门方言,具有较强的可读性,写更少的更易懂的脚本,完成同样的功能。

基于Spring boot框架

我选择了Spring boot框架作为MVC,看重了它的惯例大于配置,不用繁琐地配置。

以下代码是伪代码,只是大概说明使用的方式

Application.java

1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
class Application {
public static void main(String[] args) {
Object[] sources = new Object[] {
Application.class,
new ClassPathResource("application_context.groovy")
};
SpringApplication.run(sources, args);
}
}

在Application启动的时候读入该脚本,解析出错会抛出异常。

src/main/resources/application_context.groovy

1
2
3
4
5
beans {
userService(UserMockService) {
parameter = "你能在这初始化参数"
}
}

在groovy配置文件里能声明要注入的beans,可以配置初始化时的参数值,这里就是声明一个userService,它的实现是UserMockService

UserController.java

1
2
3
4
5
6
7
8
9
@Controller
class UserController {
@Autowired
private UserService userService;

public User getUserAction(Long userId) {
return userService.findByUserId(userId);
}
}

User.java

1
2
3
4
5
6
class User {
String name;
public User(String name) {
this.name = name;
}
}

UserService.java

1
2
3
interface UserService {
User findByUserId(Long userId);
}

UserMockService.java

1
2
3
4
5
6
7
8
9
10
11
class UserMockService implements UserService {
private String parameter;

public String getParameter() { return parameter; }
public void setParameter(String parameter) {
this.parameter = parameter;
}
public User findByUserId(Long userId) {
return new User("mockUser");
}
}

参考资料

< fuck>XML< /fuck>

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×