<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          anspring安卓平臺(tái)仿spring

          聯(lián)合創(chuàng)作 · 2023-09-25 04:48

          框架簡(jiǎn)介:
          spring框架給J2EE開發(fā)者帶來(lái)了諸多便利,尤其是經(jīng)典的ioc和aop帶來(lái)的對(duì)象設(shè)計(jì)以及擴(kuò)展的極大便捷。
          但是安卓平臺(tái)始終缺失這一利器,然而官方android-spring的發(fā)布,居然發(fā)現(xiàn)和J2EE的spring大相徑庭。
          無(wú)奈之下,作者只能模仿J2EE版spring的功能,寫了一個(gè)輕量的anspring。


          設(shè)計(jì)原則:
          力求和官方spring用法保持一致。
          使用簡(jiǎn)潔。


          核心spring:
          實(shí)現(xiàn)了ioc的基本功能,包括 @AutoWired @Scope @Component @Qualifier @PostConstruct @PreDestroy
          暫時(shí)未實(shí)現(xiàn)applicationContext.xml,
          使用@Configuration,以標(biāo)注的形式實(shí)現(xiàn)配置,包含@ConponentScan @Import @PropertySource @Value @Bean
          由于android對(duì)cglib的不支持(也許認(rèn)識(shí)有誤),aop沒(méi)有實(shí)現(xiàn)。只實(shí)現(xiàn)了不完善的 @Transaction


          外圍工具集:
          一個(gè)輕量級(jí) Logx框架,去掉了討厭的tag,直接Logx.d(...),tag自動(dòng)生成(類名-方法名-行數(shù)), 并支持單個(gè)日志文件/日期劃分日志文件/體積劃分日志文件
          ActivityInject/SystemInject 對(duì)R.id 和按鈕事件 等的注入,下個(gè)版本擬支持自定義解析器
          AndroidUtils 簡(jiǎn)化alert()等android相關(guān)常用操作


          詳細(xì)用法:

          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對(duì)象)
                  ActivityInjecter.inject(this); //注入this中的成員變量(android特有對(duì)象)
                  Logx.d("加載成功");
              }
              @Override
              protected void onDestroy() {
                  SpringUtils.unload();
                  super.onDestroy();
              }
              @OnClick({R.id.button1,R.id.button2}) //給按鈕注冊(cè)事件
              public void onClick(View v) {
                  androidUtils.alert("消息", xm.getName(), "確定", null);
              }
              @OnLongClick(R.id.button2)
              public boolean onLongClick() {
                  androidUtils.toast("長(zhǎng)按");
                  return false;
              }
              @AfterStart(1000) //啟動(dòng)后延時(shí)加載 
              private void afterViewTest(){
                  androidUtils.toast("延時(shí)一秒");
              }
          }
          @Configuration //相當(dāng)于applicationContext.xml
          @PropertySource("assets:test.ini") //讀取配置文件
          public class MyConfigure implements ConfigurationTemplate {
              @Override
              @Bean  //相當(dāng)于applicationContext.xml中的<bean></bean>
              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 //表明這是一個(gè)bean
          public class XiaoMing {
              String name;
              @Value("shadiao")
              String wahao;
              @Value("${rc.xiaoming.age}") //使用配置文件注入
              int age;
              
              @Autowired //參數(shù)注入的方式
              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 加載完畢后執(zhí)行
              public void sayHello(){
                  Logx.d("hello:",this.toString());
              }
              
              @PreDestroy //spring destroy前執(zhí)行
              public void saybye(){
                  Logx.d("bye:",this.toString());
              }
          }
          瀏覽 20
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91无码| 色01影院网站 | 免费看一级a片一级a片不人片 | 欧美一级颜情免费视频 | 五月天在线欧美日韩在线 |