Spring三种配置方式

Spring有以下几种常用的配置方式

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;
	//get、set、toString方法略
}

Dog.java

public class Dog {
    private String name;
    private String breed; //品种
    private int age;
   //get、set、toString方法略
}

配置文件: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;

  //get,set方法略
}

Dog.java

public class Dog {
    private String name;
    private String kind;
    private int age;
    //get,set方法略
}

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);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值