当前位置: 首页 > news >正文

spring用注解配置,不用XML


//首先装载一个配置类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);


配置类这样写
@Configuration  //等同与xml中的<beans>标签
@ComponentScan("com.pkg") //扫描包下的所有类
public class MyConfig {

}


茴字的另一种写法

@Configuration
public class MyConfig {
    @Bean
    public SomeService someService() {
        return new SomeService();
    }
}


@Component
@Scope("prototype")
//Singleton:表示该Bean是单例模式,在Spring容器中共享一个Bean的实例
//Prototype:每次调用都会新创建一个Bean的实例
//Request:这个是使用在Web中,给每一个http request新建一个Bean实例
//Session:这个同样是使用在Web中,表示给每一个http session新建一个Bean实例
public class SomeService {
        ....
}


//使用BEAN
SomeService bean = context.getBean(SomeService.class);



另各种注解
@Controller用于标注控制层组件
@Service用于标注业务层组件
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
级别Controller> Service > Repository

 

 

Spring EL

@Configuration
@ComponentScan("org.sang")
@PropertySource(value = "some.properties",encoding = "UTF-8")
public class ELConfig {
        //直接赋值
    @Value("String value")
    private String normal;
    
    //使用java代码
    @Value("#{T(java.lang.Math).random()*100}")
    private double randomNumber;
    
    //加载文本
    @Value("file.txt")
    private Resource testFile;
    
    //some.properties 中的值
    @Value("${ppp.value}")
    private String su;
    
    //代码
    @Value("#{T(java.lang.Math).random()*100}")
    private double randomNumber;
    
}

 

两种方法初始化和销毁
@Configuration
public class MyConfig {
    @Bean(initMethod = "init",destroyMethod = "destroy")
    BeanWayService beanWayService() {
        return new BeanWayService();
    }
    @Bean
    JSR250WayService jsr250WayService() {
        return new JSR250WayService();
    }
}


public class JSR250WayService {
    @PostConstruct//构造方法执行之后执行
    public void init() {
        System.out.println("JSR250WayService-init()");
    }

    public JSR250WayService() {
        System.out.println("JSR250WayService-构造方法");
    }
    @PreDestroy//销毁之前执行
    public void destroy() {
        System.out.println("JSR250WayService-destroy()");
    }
}


  @Profile设置初始化选项,类似的注解有@Conditional
 
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.getEnvironment().setActiveProfiles("prod");
    context.register(ProfileConfig.class);
    context.refresh();//需要刷新
    
    
    @Configuration
    public class ProfileConfig {
    @Bean
    @Profile("dev")
    public DemoBean devDemoBean() {
        return new DemoBean("dev");
    }

    @Bean
    @Profile("prod")
    public DemoBean prodDemoBean() {
        return new DemoBean("prod");
    }
    }

//计划任务
@EnableScheduling//开启对计划任务的支持


@Scheduled(cron = "0 51 20 * * ?")
    public void fixTimeExecution() {
     .....
    }
    
组合注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@ComponentScan
public @interface MyConfiguration {
    String[] value();
}


@Configuration
@ComponentScan("com.pkg")
等同于
@MyConfiguration("com.pkg")

 

 

文章来源http://blog.csdn.net/u012702547

转载于:https://www.cnblogs.com/ruanjianxian/p/8617221.html

相关文章:

  • 在项目中导入import javax.servlet 出错解决办法
  • notepad++中emmet插件的使用
  • python 线程,GIL 和 ctypes
  • 【转】CentOS 7. #215; 系统及内核升级指南
  • DNS
  • 函数指针的用法
  • HW2017笔试编程题
  • Flex定时任务设置组件
  • 关于集合的size的操作
  • 理清文件编码,告别中文乱码
  • sublime text3简体中文版汉化教程
  • CAS(客户端)程序获取安全证书
  • FZU OJ 1056 :扫雷游戏
  • C++矢量图形库系列(1)——矢量图形库乱谈(转)
  • 关于引入文件名字问题
  • [LeetCode] Wiggle Sort
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2017-09-12 前端日报
  • Angularjs之国际化
  • CentOS从零开始部署Nodejs项目
  • CODING 缺陷管理功能正式开始公测
  • gitlab-ci配置详解(一)
  • Laravel 中的一个后期静态绑定
  • nfs客户端进程变D,延伸linux的lock
  • Odoo domain写法及运用
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 爱情 北京女病人
  • 分布式任务队列Celery
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 后端_ThinkPHP5
  • 记录:CentOS7.2配置LNMP环境记录
  • 简析gRPC client 连接管理
  • 警报:线上事故之CountDownLatch的威力
  • 你真的知道 == 和 equals 的区别吗?
  • 普通函数和构造函数的区别
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端相关框架总和
  • 前嗅ForeSpider教程:创建模板
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用agvtool更改app version/build
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 为什么要用IPython/Jupyter?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 移动端 h5开发相关内容总结(三)
  • nb
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragma data_seg 共享数据区(转)
  • (007)XHTML文档之标题——h1~h6
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(下)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一