android aspect 框架,如何在Android环境下支持Spring框架下得AOP,DI,Aspect等

你们都知道,Spring在JavaEE开发中扮演着很是重要的地位。

能够利用它的依赖注入(DI)很好的实现各个模块直接的解耦。

能够利用它的AOP很好的实现面向方面的编程,实现与事务无关的业务逻辑(事务代码写在切面中)

能够使用不一样的注解(@Controller;@Service;@Repository)很好的实现分红架构, 代表各个模块的做用

能够用MVC实现的Controller很好的处理请求和响应客户端请求

能够轻松的使用集成其余第三方组件实现的功能等。

那这么好的功能,如何能在Android上使用呢,服务于Android开发者呢?

如今给你们推荐一个第三方库, 能够很方便的集成到您的应用里面,获取以上这些功能

447aa95d7df7775e88168ec46d052839.pngjava

Introduction

Android-spring is a android library project support IOC , DI , AOP and HTTP/Handler , it use annotation to config 。 It contains a simple project. android

Add the dependency

dependencies {

compile 'com.hianzuo.android:LibSpring:1.0.4'

}

Init spring from Application

public class SimpleApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

//if in dev mode ,please line blow code

SpringInitializer.devMode();

//spring init, you can add more package to scan spring component.

SpringInitializer.init(this,

"com.hianzuo.spring.simple.test.",

"other package to scan spring component");

}

}

DI Support in Activity

public class MainActivity extends AppCompatActivity {

@Resource

private TestService testService;

@Resource

private PrintService printService;

@Resource(beanName = "testBean")

private BeanTest testBean;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

testService.handle();

setContentView(R.layout.activity_main);

TextView tv = findViewById(R.id.tv);

tv.setText(printService.print() + "\n\n" + testBean.getText());

}

}

Configuration Bean

@Component

@Configuration

public class TestConfiguration {

@Bean("testBean")

public BeanTest bean1() {

return new BeanTest("bean name in annotation");

}

@Bean

public BeanTest methodIsBeanName() {

return new BeanTest("method is bean name");

}

}

AOP

@Aspect

public class TestServiceAspect {

@Pointcut("^.*?handle\\(\\).*+$")

public void handle() {

System.out.println("AAA TestServiceAspect handle");

}

@Before("handle")

public void before(JointPoint point) {

System.out.println("AAA TestServiceAspect before");

}

@Around(value = "handle")

public Object around(JointPoint point) {

System.out.println("AAA TestServiceAspect around start");

Object result = point.invokeResult();

System.out.println("AAA TestServiceAspect around end");

return result;

}

@After(value = "handle")

public void after(JointPoint point) {

System.out.println("AAA TestServiceAspect after");

}

Service Annotation Support

@Service

public class TestServiceImpl implements TestService {

@Resource

private PrintService printService;

@Resource(beanName = "testBean")

private BeanTest testBean;

@Resource(beanName = "methodIsBeanName")

private BeanTest testBean1;

@Override

public void handle() {

printService.print();

System.out.println("AAA BeanTest :" + testBean.getText());

System.out.println("AAA BeanTest1 :" + testBean1.getText());

System.out.println("AAA TestService.handle.");

}

@Override

public void execute() {

System.out.println("AAA TestService.execute.");

}

}

Cache Support

@Component

public class DemoProviderImpl extends AbstractCacheAble {

@Override

protected Integer getKey(Demo demo) {

return demo.getId();

}

@Override

protected List loadData() {

//load Demo data from remote server or database

ArrayList list = new ArrayList<>();

list.add(new Demo(1, "aaa"));

list.add(new Demo(2, "bbb"));

return list;

}

}

Http Handler Support

@Handler("/api/login")

public class HttpLoginHandler extends BaseHandler {

@Override

protected Object getMethodParamObjectByType(Class> type) {

if(type == LoginData.class){

String username = (String) getMethodParamObject("username");

String password = (String) getMethodParamObject("password");

return new LoginData(username,password);

}

return super.getMethodParamObjectByType(type);

}

@Override

protected Object getMethodParamObject(String value) {

// get value from request.

// demo request.getParameter(value);

return null;

}

@CheckMethod

protected String check(@MethodParam("username") String username) {

if (StringUtil.isEmpty(username) || username.trim().length() < 4) {

throws new RuntimeException("用户名不能为空");

}

return null;

}

@Resource

private LoginService loginService;

//you can use @MethodParam Annotation to get parameter

/*@HandleMethod

public void handle(@MethodParam("username") String username, @MethodParam("password") String password) {

loginService.login(username, password);

}*/

//you can get DataModel in Method Param , register in (Object getMethodParamObjectByType(Class> type))

@HandleMethod

public void handle(LoginData data) {

loginService.login(data.getUsername(), data.getPassword());

}

}

Repository Annotation Support

@Repository like @Service Annotation for the Component.git

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值