我的团队正在转向Spring 3.0,有些人想要开始将所有内容都移到Annotations中.当我看到一个类似这样的方法的类时,我的肠道感觉非常糟糕(代码味道?):(只是一个例子 - 不是所有真正的注释)
@Transaction
@Method("GET")
@PathElement("time")
@PathElement("date")
@Autowired
@Secure("ROLE_ADMIN")
public void manage(@Qualifier('time')int time) {
...
}
Run Code Online (Sandbox Code Playgroud)
我只是落后于时代,还是这对所有人来说都是一个可怕的想法?而不是使用诸如继承和多态的OO概念,现在通过约定或通过注释来实现一切.我只是不喜欢它.必须重新编译所有代码来改变IMO配置的东西似乎是错误的.但它似乎是一切(特别是春天)的方式.我应该"克服它"还是应该推回并尝试尽可能地保留我们的代码作为注释?
最近在我们的团队中,我们开始讨论在代码中使用spring注释来定义spring依赖项.目前我们使用context.xml来定义依赖项.你能不能给我一些线索,哪一种更好用?
编辑:我知道这对于更一般的问题来说似乎是一个重复的问题,但我对注释与配置对依赖注入的影响感兴趣,我相信它会比一般问题有不同的答案和态度.
注释如何在PHP中有用?我并不是指一般的PHPDoc.
我想,我只想要一个真实世界的例子.
因此,根据@ Max的回答:注释与Abstract Factories完成相同的事情,只通过一行专门的PHPDoc. - hopeseekr 0秒前编辑
我正在研究这本书(我强烈推荐),我很困惑作者如何解释Spring框架的配置方式.
您可以在此处查看本书中使用的一些代码示例.(任何人都可以使用它们.)如果你想看一下,我所指的代码将是第2章的代码.
无论如何,本书指出有三种配置Spring容器的方法.
基于XML的配置
这将需要一个类似于下面的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<bean id="accountService" class="com.wiley.beginningspring.ch2.AccountServiceImpl">
<property name="accountDao" ref="accountDao"/>
</bean>
<bean id="accountDao" class="com.wiley.beginningspring.ch2.AccountDaoInMemoryImpl">
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
然后为了引导Spring,将使用的代码是:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/com/wiley/beginningspring/ch2/ch2-beans.xml");
Run Code Online (Sandbox Code Playgroud)
我此刻没有任何困惑.
基于Java的配置
在此Configuration方法中,将有一个配置类,如下所示:
@Configuration
public class Ch2BeanConfiguration {
@Bean
public AccountService accountService() {
AccountServiceImpl bean = new AccountServiceImpl();
bean.setAccountDao(accountDao());
return bean;
}
@Bean
public AccountDao accountDao() {
AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
return bean;
}
}
Run Code Online (Sandbox Code Playgroud)
并且负责引导Spring的代码如下所示:
ApplicationContext applicationContext
= new AnnotationConfigApplicationContext(Ch2BeanConfiguration.class);
Run Code Online (Sandbox Code Playgroud)
所以到了这里,对我来说一切都很清楚.(有点......)我还要注意,这里我们实际上有一个名为@Configuration的Annotation ...
基于注释的配置 …
之前的配置曾经在代码中进行了硬编码,之后将其外部化为.property文件(为了避免硬编码值,避免为了更改配置而改变代码等等),然后将其移至XML(for为了更加标准化,没有错误..等等)
现在,在阅读Spring 3中的@Configuration时,看起来我们又回到了最初的方法.
为什么我们要在代码中硬编码配置而不是将其外部化?
我很难理解Annotations的重要性和好处,因此有两个问题:
希望通过示例与XML配置进行利弊比较,以便对我理解更有帮助.
问候.
我是java的新手,我正在阅读有关注释和xml的内容,我个人认为xml有很多优点,比如它可以放在应用程序之外,可以在不重新编译类文件的情况下进行更改.如果我使用注释,如果我需要进行更改需要转到源代码并重新编译应该完成.如果是这种情况,我们为什么要使用注释
当我使用Spring框架时,我经常看到2个基于Java和基于注释的配置/自动装配术语。
基于Java的与基于注释的配置/自动装配是否有所不同?
如果它们不同,您能告诉我它们之间有什么不同吗?
我已经阅读了关于Mybatis的书和文档,XML和Annotation都做了我想要的,但是从myBatis官方网站,他们声称XML是一种更好的做Mappers的方法,因为Java注释有局限性.
我个人更喜欢注释,例如
public interface PersonDAO {
String INSERT_PERSON = "insert into person (title,firstName,surName,jobTitle,dob,email,mobile,landPhone,fax,twitter,facebook,linkedin) VALUES (#{title},#{firstName},#{surName},#{jobTitle},#{dob},#{email},#{mobile},#{landPhone},#{fax},#{twitter},#{facebook},#{linkedin})";
String UPDATE_PERSON = "update person set title=#{title},firstName=#{firstName},surName=#{surName},jobTitle=#{jobTitle},dob=#{dob},email=#{email},mobile=#{mobile},landPhone=#{landPhone},fax=#{fax},twitter=#{twitter},facebook=#{facebook},linkedin=#{linkedin} where id=#{id}";
String GET_PERSON_BY_ID = "SELECT * FROM vw_person WHERE id = #{personId}";
String DELETE_PERSON = "DELETE FROM person WHERE id = #{personId}";
@Select(GET_PERSON_BY_ID)
public PersonVO doSelectPerson(long personId) throws Exception;
@Update(UPDATE_PERSON)@Options(flushCache = true, useCache = true)
public int doUpdatePerson(PersonVO vo) throws Exception;
@Insert(INSERT_PERSON)@Options(useGeneratedKeys = true, keyProperty = "id", flushCache = true)
public int doCreatePerson(PersonVO person) throws Exception;
@Delete(DELETE_PERSON)@Options(flushCache …Run Code Online (Sandbox Code Playgroud) 今天我尝试使用Hibernate作为ORM创建一个应用程序.因此,虽然创造我有一个疑问.使用的最佳实践是什么,Hibernate映射文件(.hbm文件)或注释?它的优点和缺点是什么?请帮助我理解.
我一般都是Spring和DI的新手.但是根据我的阅读,DI使您能够使用类似框架轻松交换实现Spring.在XML bean配置方面,我可以理解它的价值,因为完成交换实现时根本不需要更改代码.但是,如果我们使用类似的注释@Autowired或@Qualifier......我们需要更改代码.那么为什么我们要在基于XML的配置上使用注释呢?
java ×9
annotations ×7
spring ×5
xml ×2
coding-style ×1
hibernate ×1
ibatis ×1
mybatis ×1
php ×1
spring-3 ×1