xml、注解各自的优劣
xml文件的优势是所有的配置都存放在一起,方便后期维护。劣势是比较复杂,而且开发时需要两个文件相互切换,很是不方便。注解的优势是方便快捷,劣势是不利于后期维护而且没有xml方式灵活,因为后期修改时需要修改代码。
注解不能使用的场景
对于别人已提供的工具类,如jar包等,不能使用注解配置,因为源文件已被确定,不可能再打开源文件进行修改。
整合开发
结合xml和注解两者各自的优点进行配置。注解的优势就是属性注入方便,连setters方法都可以没有。而xml的优势是结构清晰,所以使用xml文件进行配置信息结构的搭建,使用注解进行简单(基本类型和引用类型)属性的注入。
<!-- 这个扫描器可以不写,因为扫描器是用来扫描类上的注解 -->
<context:component-scan base-package="com.spring.secondday" ></context:component-scan>
<!-- 不开启扫描其,需要配置这个,它是让我们能再不配置扫描器的时候使用@Resource、@Value、@Autowired等属性上的注解 -->
<context:annotation-config />
<bean id="userDao" class="com.spring.secondday.UserDaoImpl"></bean>
<bean id="userService" class="com.spring.secondday.UserServiceImpl"></bean>
import org.springframework.beans.factory.annotation.Value;
public class UserDaoImpl implements UserDao {
@Value("HelloWorld")
private String name;
public void save() { }
public String toString() {
return "UserDaoImpl [name=" + name + "]";
}
}
import javax.annotation.Resource;
public class UserServiceImpl implements UserService{
@Resource(name="userDao")
private UserDao ud;
public void save() { }
public String toString() {
return "UserServiceImpl [ud=" + ud + "]";
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService)ac.getBean("userService");
System.out.println(us);
/*Console:
* UserServiceImpl [ud=UserDaoImpl [name=HelloWorld]] */
}
}