- 浏览: 1236734 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
@Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation。
从spring2.5开始,annotation结合BeanPostProcessor成了扩展Spring IoC容器的常用方法。Spring2.5增加了对JSR-250中@Resource, @PostConstruct, @PreDestroy的支持,Spring 3.0又增加了对JSR-330 (Dependency Injection for Java)中 @Inject,@Qualifier, @Named, @Provider的支持。将相关的jsr jar包丢到classpath,并注册相应的BeanPostProcessor,其它的一切spring会帮你完成。spring还提供了一个简便的方法,通过在context的XML配置文件中加入:
<context:annotation-config/>
spring 会自动注册AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor,代码中就可以使用@Autowired, @Required等annotaion了。
再回到文章开头的问题吧。spring从2.5开始加入了classpath scanning的功能,来代替之前在xml中定义Bean。首先在context的XML配置文件中加入:
<context:component-scan base-package="org.example"/>
spring 便会在org.example以及它的子package中查找所有的类,将符合条件的Bean注册在IoC容器当中。到3.0,spring引入了4种原型annotation(stereotype annotaion),分别为@Component, @Serivce, @Controller, @Repository。一般情况下只在将类加上@Componet,spring在扫描classpath的时候会自动检测到,并将这个类注册到IoC 容器中,在代码的其它部分,便可以借助@Autowired来注入这个Bean。后面的三种原型分别是特殊的@Conponet,适用于更加特殊的场合,比如Service层,Spring MVC, DAO等。这一点从源码上也可以看出:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { String value() default ""; }
@Service本身就是被@Componet这个元注解(meta annotaion)标注的。因此对于这三个层的Bean, spring的文档也推荐将它们标注为@Service, @Controller与@Repository,因为这样更方便其它工具对这些特殊Bean的处理以及为它们加上相关AOP的 aspects,spring在后续版本的升级上也可能对它们增加更多的特殊语义。至于它们到底比普通的@Componet多了哪些 aspects,spring的文档上并没有详细说明,只简单地提到了对于@Repository,spring会自动加上exception translation,用于转化持久层抛出的异常。我google了一下,包括spring论坛的帖子,也没能找到这方面的详细信息,这点希望熟悉spring源代码的朋友能够说说。
现在通过classpath scanning以及@Component,@Autowired等annotation,我们已无须通过xml来定义Bean了。但还必须在application context的xml中添加<context:annotation-config/>与<context:component-scan base-package="org.example"/>。再进一步想,能不能把这个配置文件也去掉,实现真正的零配置?spring3.0原先Spring JavaConfig项目的功能移到了Spring Core里面,从而实现了利用Java代码来代替传统的XML配置文件,这个功能是通过@Configuration, @Bean, @Import, @DependsOn等annotation实现的。
@Configuration public class AppConfig { @Bean public GreetingDao greetingDao() { return new GreetingDao(); } } public class GreetingDao { public String getGreeting(){ return "Hi"; } }
@configuration表明这个类包含Bean的定义,@Bean在这里就相当于原先的配置:<bean id="greetingDao" class="septem.demo.GreetingDao"/>。通过AnnotationConfigApplicationContext就可以使用这个Bean了:
@Test public void test_java_config(){ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); GreetingDao dao = ctx.getBean(GreetingDao.class); assertEquals("Hi", dao.getGreeting()); }
注意AppConfig里面的greetingDao虽然是是直接new出来的,但它的默认scope仍是singleton,跟采用配置文件的情况是一样的,如果需要prototype,则可以另外为它加上@Scope("prototype")。上面采用的方法是手工将Bean定义在 @Configuration里面,我们同样可以让spring自动检测Bean,比如下面的GreetingSerivce:
@Service public class GreetingService { public String sayHello(){ return "Hello"; } }
将GreetingService标注为@Service,就不需要在AppConfig里面注册了:
@Test public void test_service(){ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.scan("septem.demo"); ctx.refresh(); GreetingService service = ctx.getBean(GreetingService.class); assertEquals("Hello", service.sayHello()); }
以上的ctx.scan("septem.demo")就相当于配置文件:<context:component-scan base-package="septem.demo"/>。注意因为@Configuration本身也是被@Component这个meta-annotation标注的,所以AppConfig也不需要手工在 AnnotationConfigApplicationContext里注册,它同@Service一样会被自动检测到。Spring3.0还提供了 AnnotationConfigWebApplicationContext用来代替原先web项目中的 XmlWebApplicationContext,这样在web项目中同样可以实现真正的零配置了。Spring的官方文档还提供了针对更复杂情况的处理方法,有兴趣的朋友可以看看。
楼主,我问下,spring和hibernate结合时,hibernate实体类使用xml方式标注可以通过<prop key="hibernate.hbm2ddl.auto">create</prop>这种方式自动创建表结果,如果换成用注解的话可不可以实现相同功能?!!!?
也是能实现的,只要在AppConfig里面提供dataSource和sessionFactory
比如以下的XML配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="jdbc:hsqldb:mem:mymemdb"/> <property name="url" value="org.hsqldb.jdbcDriver"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan"> <list> <value>septem.model</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">create</prop> </props> </property> </bean>
换成代码就是:
@Configuration public class AppConfig { @Bean public GreetingDao greetingDao() { return new GreetingDao(); } @Bean public ChildBean childBean(){ return new ChildBean(); } @Bean(destroyMethod = "close") public BasicDataSource dataSource(){ BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("jdbc:hsqldb:mem:mymemdb"); dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; } @Bean public AnnotationSessionFactoryBean sessionFactory(){ AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(new String[]{"septem.model"}); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } private Properties hibernateProperties(){ Properties p = new Properties(); p.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); p.setProperty("hibernate.hbm2ddl.auto", "create"); return p; }
当然你也可以将数据库的连接等信息保存在properties文件里面
楼主,我问下,spring和hibernate结合时,hibernate实体类使用xml方式标注可以通过<prop key="hibernate.hbm2ddl.auto">create</prop>这种方式自动创建表结果,如果换成用注解的话可不可以实现相同功能?!!!?
同此想法
如果想改xml中的参数 肯定要改代码 一想到改代码 会疯掉
发表评论
-
spring boot整合mybatis+mybatis-plus
2019-02-08 23:58 0https://www.cnblogs.com/lia ... -
Spring点滴 Spring实战系列
2018-11-14 18:06 0https://www.cnblogs.com/si ... -
易百教程
2017-06-07 14:00 0http://www.yiibai.com/lua/l ... -
关于Spring Data redis几种对象序列化的比较
2016-09-06 15:01 0问题 最近在整一个spring data r ... -
spring 结合 Redis 例子,简单入门例子
2016-09-05 10:51 0http://oyhk.iteye.com/blog/ ... -
spring与redis集成之aop整合方案
2016-09-05 10:20 0http://blog.csdn.net/zhann ... -
Dubbo搭建例子
2016-09-03 17:35 0http://blog.csdn.net/lzxads ... -
集群部署服务和消费者测试(1)
2016-09-03 17:10 0修改dp和dc程序为注册到集群zookeeper中 ... -
zookeeper 服务器安装 单例和集群
2016-09-03 17:02 0http://blog.csdn.net/fangxi ... -
dubbo起步搭建Spring+SpringMVC+dubbo的开发环境
2016-09-03 16:49 0http://blog.csdn.net/fangxi ... -
Memcached与Spring AOP构建数分布式据库前端缓存框架
2016-09-02 22:19 0由于上一篇有介绍了Memcached缓存,并集群部 ... -
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
2016-09-02 22:11 0原文链接:http://blog.csdn.net/cong ... -
重要,Spring注解事务无效 和 Cannot add foreign key constraint
2016-02-20 02:18 0Cannot add foreign key con ... -
Spring2.5.6中定时器Quarz的使用
2015-10-08 10:07 691下面说明详细的配置: applicationContext ... -
spring ioc原理(看完后大家可以自己写一个spring)
2015-08-07 14:43 0http://blog.csdn.net/it_ma ... -
Spring技术内幕——深入解析Spring架构与设计原理(二)AOP
2015-08-04 19:32 0http://jiwenke.iteye.com/ ... -
spring源码分析之——spring aop原理
2015-08-04 19:18 0aop是spring中非常有趣的一个功能。如果应用得当会大有 ... -
自我分析-Spring AOP
2015-08-04 19:13 0aop是spring中非常有趣的一个功能。如果应用得当会大有 ... -
利用AbstractRoutingDataSource实现动态数据源切换
2015-07-15 14:44 0利用AbstractRoutingDataSource实现 ... -
spring 使用AbstractRoutingDataSource自定义动态数据源时的事务处理
2015-07-15 14:38 0spring 使用AbstractRoutingDataSo ...
相关推荐
4. **注解驱动的Spring**:"Spring3.0-annotation"章节会介绍如何利用Java注解来代替XML配置,如`@Component`、`@Service`、`@Repository`和`@Controller`等,这些注解可以帮助我们声明bean及其作用范围。...
- 自Spring 3.0起,可以用Java配置代替XML配置,同样使用`@EnableTransactionManagement`开启事务管理,然后使用`@Transactional`注解。 ```java @Configuration @EnableTransactionManagement public class ...
2. **注解配置 (Annotation-based Configuration)**:Spring 2.5 引入了大量注解,如 `@Autowired`、`@Required` 和 `@Component` 等,使得开发者可以使用注解代替 XML 配置文件,简化了配置过程,提高了开发效率。...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
Spring 3.0引入了基于Java的配置支持,可以通过`@Configuration`注解定义配置类。在配置类中,使用`@Bean`注解的方法来定义Bean实例。这种方式相比于XML配置更加简洁、易于维护。 29. **解释Spring的模板类,如...
- **注解驱动**:用注解(Annotation)代替XML配置,简化了元数据的声明,减少了出错可能,提高了开发效率。 - **依赖注入**:引入了Dependency Injection(DI)概念,替代了传统的JNDI查找机制,使Session Bean的...
例如,我们可以使用`@WebFilter`和`@WebListener`来代替web.xml中的filter和listener元素。 总的来说,Servlet注解配置提供了以下优势: 1. **简洁性**:注解使得配置更加直观,减少了大量XML配置文件的编写。 2. ...