如何在Android环境下支持Spring框架下得AOP,DI,Aspect等
可以利用它的依赖注入(DI)很好的实现各个模块直接的解耦。可以利用它的AOP很好的实现面向方面的编程,实现与事务无关的业务逻辑(事务代码写在切面中)可以使用不同的注解(@Controller;@Service;@Repository)很好的实现分成架构, 表明各个模块的作用可以用MVC实现的Controller很好的处理请求和响应客户端请求可以轻松的使用集成其他第三方组件实现的功能等。那这么好的功能,如何能在Android上使用呢,服务于Android开发者呢?
项目地址:https://github.com/hianzuo/android-springIntroduction现在给大家推荐一个第三方库, 可以很方便的集成到您的应用里面,获取以上这些功能
Android-spring is a android library project support IOC , DI , AOP and HTTP/Handler , it use annotation to config 。 It contains a simple project.
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@Configurationpublic 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
@Aspectpublic 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
@Servicepublic 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
@Componentpublic class DemoProviderImpl extends AbstractCacheAble<Integer, Demo> { @Override protected Integer getKey(Demo demo) { return demo.getId(); } @Override protected List<Demo> loadData() { //load Demo data from remote server or database ArrayList<Demo> 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.
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。