当前位置:  软件>java软件

安卓平台仿spring anspring

    来源:    发布时间:2015-01-01

    本文导语:  框架简介: spring框架给J2EE开发者带来了诸多便利,尤其是经典的ioc和aop带来的对象设计以及扩展的极大便捷。 但是安卓平台始终缺失这一利器,然而官方android-spring的发布,居然发现和J2EE的spring大相径庭。 无奈之下,作者...

框架简介:
spring框架给J2EE开发者带来了诸多便利,尤其是经典的ioc和aop带来的对象设计以及扩展的极大便捷。
但是安卓平台始终缺失这一利器,然而官方android-spring的发布,居然发现和J2EE的spring大相径庭。
无奈之下,作者只能模仿J2EE版spring的功能,写了一个轻量的anspring。


设计原则:
力求和官方spring用法保持一致。
使用简洁。


核心spring:
实现了ioc的基本功能,包括 @AutoWired @Scope @Component @Qualifier @PostConstruct @PreDestroy
暂时未实现applicationContext.xml,
使用@Configuration,以标注的形式实现配置,包含@ConponentScan @Import @PropertySource @Value @Bean
由于android对cglib的不支持(也许认识有误),aop没有实现。只实现了不完善的 @Transaction


外围工具集:
一个轻量级 Logx框架,去掉了讨厌的tag,直接Logx.d(...),tag自动生成(类名-方法名-行数), 并支持单个日志文件/日期划分日志文件/体积划分日志文件
ActivityInject/SystemInject 对R.id 和按钮事件 等的注入,下个版本拟支持自定义解析器
AndroidUtils 简化alert()等android相关常用操作


详细用法:

https://github.com/liujingjing5/anspring/wiki/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3


列子代码:

public class MainActivity extends Activity{
    @R_Id(R.id.button1) //注入按钮id
    Button btn2;

    @Autowired //以名称注入bean
    @Qualifier("manServiceImp1")
    ManService manService;
    
    @Autowired //以类型注入bean
    AndroidUtils androidUtils;
    
    @Autowired
    XiaoMing xm;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SpringUtils.load(this,MyConfigure.class); //用MyConfigure的配置,加载spring容器
        BeanInjecter.inject(this); //注入this的成员变量(bean对象)
        ActivityInjecter.inject(this); //注入this中的成员变量(android特有对象)
        Logx.d("加载成功");
    }
    @Override
    protected void onDestroy() {
        SpringUtils.unload();
        super.onDestroy();
    }
    @OnClick({R.id.button1,R.id.button2}) //给按钮注册事件
    public void onClick(View v) {
        androidUtils.alert("消息", xm.getName(), "确定", null);
    }
    @OnLongClick(R.id.button2)
    public boolean onLongClick() {
        androidUtils.toast("长按");
        return false;
    }
    @AfterStart(1000) //启动后延时加载 
    private void afterViewTest(){
        androidUtils.toast("延时一秒");
    }
}
@Configuration //相当于applicationContext.xml
@PropertySource("assets:test.ini") //读取配置文件
public class MyConfigure implements ConfigurationTemplate {
    @Override
    @Bean  //相当于applicationContext.xml中的
    public DataSource dataSource() {
        DataSource dataSource = new DataSource(){
            @Override
            protected SQLiteDatabase injectSQLiteDatabase() {
                SQLiteOpenHelper helper = new SQLiteOpenHelper(SpringUtils.getSpringContext().getContext(), "spring.db", null, 1) {
                    @Override
                    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // TODO Auto-generated method stub
                    }
                    @Override
                    public void onCreate(SQLiteDatabase db) {
                        // TODO Auto-generated method stub
                    }
                };
                SQLiteDatabase db = helper.getWritableDatabase();
                return db;
            }
        };
        return dataSource;
    }
    @Override
    @Bean
    public SqliteTemplate sqliteTemplate(DataSource dataSource) {
        SqliteTemplate template = new SqliteTemplate(dataSource);
        return template;
    }
    @Override
    @Bean
    public TransactionManager transactionManager(DataSource dataSource) {
        TransactionManager tm = new TransactionManager(dataSource);
        return tm;
    }
    @Bean
    public AndroidUtils androidUtils(){
        return new AndroidUtils(SpringUtils.getSpringContext().getContext());
    }
}
@Component //表明这是一个bean
public class XiaoMing {
    String name;
    @Value("shadiao")
    String wahao;
    @Value("${rc.xiaoming.age}") //使用配置文件注入
    int age;
    
    @Autowired //参数注入的方式
    public XiaoMing(@Value("${rc.xiaoming.name}")String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "XiaoMing [name=" + name + ", wahao=" + wahao + ", age=" + age
                + "]";
    }
    @PostConstruct //spring 加载完毕后执行
    public void sayHello(){
        Logx.d("hello:",this.toString());
    }
    
    @PreDestroy //spring destroy前执行
    public void saybye(){
        Logx.d("bye:",this.toString());
    }
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 问Linux高手一个安卓系统的问题,麻烦回答一下,谢谢!
  • 安全的安卓 Jabber 客户端 SecuXabber
  • 安卓性能测试工具 APT
  • 安卓开发框架 AndroidAnnotations
  • 安卓文件传输工具 流传
  • 谷歌被屏蔽后如何搭建安卓环境
  • 安卓手机浏览器 ​Zirco
  • 安卓监听屏幕的横竖翻转实现方法
  • 解决video标签在安卓webview下无法自动播放问题
  • 安卓servicemanager不断重启
  • 安卓插件开发框架 CJFrameForAndroid
  • OSC 安卓客户端 哎嘛
  • 安卓编辑和运行lua代码 android-lua-run
  • 安卓控制电脑
  • 安卓(Android)中如何实现滑动导航
  • Github 的 安卓客户端 OctoDroid
  • android轻松管理安卓应用中的log日志 发布应用时log日志全部去掉的方法
  • 博客 iis7站长之家
  • 安卓应用开发通过java调用c++ jni的图文使用方法
  • Github 的 安卓客户端 gh4a


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3