Maxon's Blog

Spring 注解开发

34

Spring 注解开发

1.1 Spring原始注解

Spring 是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率.

注意:

使用注解的时候需要开启组件扫描

Xml
<!--配置组件扫描-->
<context:component-scan base-package="me.aowu"/>

1.2 @Autowired和@Qualifier 注入解析

Java
前:
@Service("userService")
public class UserServiceImpl implements UserService {
    //      <property name="userDao" ref="userDao"></property>-->
    //@AutoWired按照数据类型从Spring容器中进行匹配  
    //由于当前UserDao只有一个Bean:userDao 故这里的@Qualifier也可省略
    @Autowired
    @Qualifier("userDao")//按照ID值从容器中进行匹配  但是此处@Qualifier 要结合@AutoWired一起使用
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save() {
        userDao.save();
    }
}

后:
@Service("userService")
public class UserServiceImpl implements UserService {
    //      <property name="userDao" ref="userDao"></property>-->
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
    @Override
    public void save() {
        userDao.save();
    }
}

1.3 @Value注入

Java
//基本用法
@Value("Aowu")
private String driver;

//可以使用el表达式 获取jdbc中的键值对
@Value("${jdbc.driver}")
private String driver;

1.4 @PostConstruct和@PreDestroy

构造和销毁

Java
    @PostConstruct
    public void init(){
        System.out.println("UserServiceImpl: Initialized!!");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("UserServiceImpl: Destroied!!");
    }

2.1 Spring新注解

使用原始注解不能全部替代xml配置文件,还需要使用注解替代的配置如下:

  • 非自定义的Bean配置 <Bean>
  • 加载Properties文件的配置 <context:property-placeholder>
  • 组件扫描的配置 <context:component-scan>
  • 引入其他文件 <import>

2.2 @Configuration

  • 标志该类是Spring的核心配置类

2.3 @ComponentScan

Java
//<!--    配置组件扫描-->
//<context:component-scan base-package="me.aowu"/>
@ComponentScan("me.aowu")

2.4 @Bean

  • 将该方法返回值存储到Spring容器中
Java
//Spring会将当前方法返回值以指定名称存储到Spring容器当中
@Bean("dataSource") 
public DataSource getDataSource() throws SQLException, PropertyVetoException {
    ComboPooledDataSource dataSource =new ComboPooledDataSource();
    ......
    return dataSource;
}

2.5 @PropertySource

Java
//<!--    加载外部properties文件-->
//<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")

2.6 @Import

Java
//<import source=""/>
@Import(DataSourceConfiguration.class)

//多个
@Import({DataSourceConfiguration.class,xxx.class})

2.7 测试类修改API

Java
//ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);