一、Java注解配置是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring的Java注解配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;
示例:这两个注解的用法
1、创建实体类:User.java
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Integer age;
//省略set/get方法
}
2、创建Dao层,模拟数据库访问:UserDao.java
public class UserDao {
public List<User> findAll(){
List<User> users = new ArrayList<User>();
for(int i=1;i<10;i++) {
User user = new User();
user.setUsername(i+"号");
user.setPassword(i+"1234");
user.setAge(i+21);
users.add(user);
}
return users;
}
}
3、创建Service层:UserService.java
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> findAllUser(){
return userDao.findAll();
}
}
4、创建注解类,相当于spring的主配置文件applicationContext.xml
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages="com.boot.service") //配置扫描包
public class SpringAnnotation {
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDao getUserDao()
{
return new UserDao();
}
}
5、测试:
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringAnnotation.class);
UserService userService = context.getBean(UserService.class);
List<User> list = userService.findAllUser();
for(User u : list) {
System.out.println(u.getUsername()+" "+u.getPassword()+" "+u.getAge());
}
context.close();
}
}
6、从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。
二、读取外部的资源配置文件,通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:
@PropertySource(value= {"classpath:jdbc.properties"})
public class SpringAnnotation {
@Value("${jdbc.driver}")
private String driver_class;
@Value("${jdbc.url}")
private String jdbc_url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource() {
DataSource dataSource = new DataSource();
dataSource.setDriverClassName(driver_class);
dataSource.setUrl(jdbc_url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(this.getDataSource());
return sessionFactory;
}