service层中注入conroller_JFinal Controller中注入Service

本文详细介绍了如何在JFinal框架下实现在Controller中注入Service,并提供了具体实现步骤,包括Controller类的构造方法重写、Service抽象类的设计以及Service类的实例化过程。通过这种方式,可以方便地在Controller中调用Service方法,如AccountService中的register方法,实现用户注册功能。
摘要由CSDN通过智能技术生成

1. 重写Controller类的构造方法

public abstract class Controller extends com.jfinal.core.Controller {

public Controller(){

Field[] fields =this.getClass().getDeclaredFields();

for (int i=0;i < fields.length; i++){

Field field = fields[i];

Class clazz = field.getType();

if(Service.class.isAssignableFrom(clazz) && clazz != Service.class){

try {

field.set(this, Service.getInstance(clazz, this));

} catch (IllegalAccessException e) {

Log.e(e);

}

}

}

}

}

2. Service抽象类

public abstract class Service {

protected Controller controller;

private static Map, Service> INSTANCE_MAP = new HashMap, Service>();

public static Ser getInstance(Class clazz, Controller controller){

Ser service = (Ser) INSTANCE_MAP.get(clazz);

if (service == null){

try {

service = clazz.newInstance();

INSTANCE_MAP.put(clazz, service);

} catch (InstantiationException e) {

Log.e(e);

} catch (IllegalAccessException e) {

Log.e(e);

}

}

service.controller = controller;

return service;

}

public User currentUser(){

return controller.getSessionAttr("user");

}

}

3. Service类

public class AccountService extends Service{

public User register(){

User user = registerByUsername();

if (user == null){

user = registerByNumber();

}

if (user == null){

user = registerByEmail();

}

if (user != null){

user.addRole("USER");

controller.setSessionAttr("user", user);

}

return user;

}

public User registerByNumber(){

String number = controller.getPara("number");

if (number == null) return null;

User user = new User();

user.set("username", "User_" + number)

.set("number", number)

.setPassword(controller.getPara("password"));

user.save();

return user;

}

public User registerByEmail(){

String email = controller.getPara("email");

if (email == null) return null;

User user = new User();

user.set("username", email.substring(0, email.indexOf("@")))

.set("email", email)

.setPassword(controller.getPara("password"));

user.save();

return user;

}

public User registerByUsername(){

String username = controller.getPara("username");

if(username == null) return null;

User user = new User();

user.set("username", username).setPassword(controller.getPara("password"));

user.save();

return user;

}

}

4. 在Controller中使用Service

AccountService accountService;

@ActionKey("/register")

public void register(){

if(getRequest().getMethod() == "POST"){

User user = accountService.register();

}

render("/account/register.ftl");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值