Spring有以下几种常用的配置方式
- 1. 基于xml的配置
- 2. 基于注解的配置
- 3. 基于Java的配置
1. 基于xml的配置
在Spring1.x时代,都是基于xml来进行配置,用xml文件来管理bean之间的关系
现在让我们来通过xml装配Bean:
首先需要两个实体类,User和Dog
User.java
public class User {
private String name;
private int age;
private Dog dog;
}
Dog.java
public class Dog {
private String name;
private String breed;
private int age;
}
配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="jackma" class="com.tyq.dto.User">
<property name="name" value="jackma" />
<property name="age" value="55" />
<property name="dog" ref="jm" />
</bean>
<bean id="jm" class="com.tyq.dto.Dog">
<property name="name" value="jack" />
<property name="breed" value="金毛" />
<property name="age" value="2" />
</bean>
</beans>
测试:
public class test {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("jackma");
System.out.println(user);
}
}
执行结果:
这里调用了User的toString方法打印了用户信息,其中Dog属性也调用了它自己的toString方法打印了dog对象的信息
2. 基于注解的配置
由于项目越来越大,过多的使用xml配置会变得不太方便(经常要在java文件和xml文件之间来回切换)
所以在Spring2.x时代,Spring提供了声明bean的注解,大大减少了配置量
注解的配置原则是:基本配置使用xml(如数据库的配置),业务配置使用注解
Bean的定义:
在bean的上面使用@Component或其子类(@Repository、@Service、@Controller)来定义bean
Bean的注入:(以下注解添加到bean的属性中)
- @required注解:应用于bean的setter方法,表示被标注过的属性必须在XML文件中配置,否则会出现异常
- @Autowire:在属性上使用@Autowire注解可以进行自动装配,减少代码
- 当需要创建多个相同类型的bean,并且只需要装配其中一个时,可以使用@Qualifier和@Autowire用来指定装载其中一个bean
例如这里有一个保存用户的操作:
先由控制层(Controller)调用服务层(Service),
再由服务层调用Dao层(数据访问层)
使用注解如下(这里不写具体的业务逻辑,只是介绍调用过程以及注解)
控制层:UserController.java
@Controller
public class UserController {
@Autowired
private UserService userService;
public String save(User user) {
userService.save(user);
return "保存成功";
}
}
服务层Service:UserService.java
@Service
public interface UserService {
void save(User user);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void save(User user) {
userDao.save();
}
}
Dao层:UserDao.java
@Repository
public interface UserDao{
void save();
}
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void save() {
}
}
3. 基于Java的配置
Spring3.0以后,提供了Java配置的能力,Spring4.x和SpringBoot都推荐使用Java配置
首先要说明以下两个注解:
- @Configuration,表示修饰的类可以作为bean的来源(通过注解来获取bean)
- @Bean,表示实例化一个bean,等同于在xml里面添加一个bean 被@Bean修饰的方法名就是该bean的name
现在让我们来通过Java代码来装配Bean:
配置文件,DemoConfig.java(对应applicationContext.xml)
@Configuration
public class DemoConfig {
@Bean
public User jackma(){
return new User();
}
@Bean
public Dog dog(){
return new Dog();
}
@Bean
public Dog haqi(){
return new Dog();
}
}
两个实体类,User,Dog
User.java
@Component("jackma")
public class User {
private String name;
private int age;
private Dog dog;
}
Dog.java
public class Dog {
private String name;
private String kind;
private int age;
}
test.java,这里使用注解的方式加载Spring容器
public class test {
public static void main(String args[]){
ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);
User user = (User) context.getBean("jackma");
System.out.println(user);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)