1.2.2Java配置
像Spring容器注册Bean
这里的@Bean的作用类似于刚才的bean标签,就是像Spring容器中注册一个Bean 默认情况下,beanName就是方法名 @Bean 注解中也有name。表示为这个bean指定名称 也可以为这个bean指定生命周期钩子函数(initmethod,destroymethod)
/**
* 这个配置类的作用就相当于是applicationcontext.xml 这个配置文件的作用
*/
public class JavaConfig {
@Bean(value = "user2")
User user(){
User user = new User();
user.setId(1);
user.setName("zhangsan");
return user;
}
}
@Configuration注解的作用
/**
* Configuration 的作用,添加这个注解后,如果调用了一个标记了@Bean的注解方法,那么这个方法不会被立刻调用,而是先去
* Spring容器中检查这个Bean 是否存在,如果存在,则直接返回,那么目标方法就不会调用了。如果Spring 容器不存在这个Bean方法,
* 则这个时候会执行目标方法,并且向Spring容器注册这个Bean
* 实现原理:AOP代理
*/
@Configuration
public class JavaConfig {
@Bean(value = "user2")
User user(){
User user = new User();
user.setId(1);
user.setName("zhangsan");
user.setBook(book());
return user;
}
@Bean
Book book(){
Book book = new Book();
book.setAuthor("luoguanzhong");
return book;
}
}
//创建Spring容器
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JavaConfig.class);
Java代码配置,可以指定Bean的优先级,以及Bean是否可以被其他Bean所依赖
使用了@Primary 注解,可以用来标记Bean的优先级,如果通过类型来查找的话,那么被标记的Bean会被优先返回
1.2.3包扫描
/**
@Repository 表示把当前类注册到Spring容器中,默认情况下,beanName 就是类名首字母小写 userDao
如果需要,也可以指定beanName
这个注解不是一个,类似的还有3个
@Service: 这个一般加载业务层
@Controller: 这个一般加载表现层(controller层)
@Component:这个加在不明身份的组件上
*/
@Repository
public class UserDao {
public String sayHello(){
return "hello";
}
}
@Service
public class UserService {
/**
* @Service就是将UserService注册到Spring 容器中
* @Autowired 是向 容器要一个 userDao 回来,默认是按照类型去查找
*/
@Autowired
UserDao userDao;
public String sayHello(){
return userDao.sayHello();
}
}
@Controller
public class UserController {
UserService userService;
/**
*由于当前类只有这一个构造器,所以Spring容器在获取当前类实例的时候, 只能调用这个构造器
* 由于这个构造器需要参数,此时就会自动去Spring 容器中找到 UserService 实例
* @param userService
* @Autowired 指定使用的构造器
*
*/
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
public UserController() {
}
public String sayHello(){
return userService.sayHello();
}
}
@Configuration
//这个就是组件扫描,默认情况,扫描的就是当前配置类所在包下的所有Bean
@ComponentScan
public class JavaConfig {
}