Spring中三种配置Bean的方式

1.使用xml配置文件

由Spring Framework本身决定,此处不详细说。

2.使用Java注解的配置

如果一个类使用了@Service,那么此类将自动注册成一个bean,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller等。然后需要在applicationContext.xml文件中加一行,作用是自动扫描base-package包下的注解:

<context:component-scan base-package="com.jl" />

BeanFactoryImpl.java

package com.stonegeek.service.impl;

import com.stonegeek.service.BeanFactory;
import org.springframework.stereotype.Service;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:
 * @Date: 2021/9/1
 * @Time: 16:28
 **/
@Service("beanFactory")
public class BeanFactroyImpl implements BeanFactory {
    @Override
    public void Beantest() {
        System.out.println("----------This is a 基于Java注解的bean!-----------");
    }
}

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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    ">
    <context:component-scan base-package="com.jl" />


</beans>

TestBean.java

package com.stonegeek;

import com.stonegeek.service.BeanFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:
 * @Date: 2021/9/1
 * @Time: 16:44
 **/
public class TestBean {
    @Test
    public void test(){
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        BeanFactory beanFactory=(BeanFactory) ctx.getBean("beanFactory");
        beanFactory.Beantest();  //This is a 基于java注解的bean!
    }
}

3.使用Java类的配置(掌握)

第一步:先创建一个User实体类

package com.jl.demo;

import java.io.Serializable;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:
 * @Date: 2021/9/1
 * @Time: 15:44
 **/
public class User implements Serializable{

 private static final long serialVersionUID = 1L;

 private String username;
 
 private String password;
 
 private int age;

 public String getUsername() {
   return username;
 }

 public void setUsername(String username) {
   this.username = username;
 }

 public String getPassword() {
   return password;
 }

 public void setPassword(String password) {
   this.password = password;
 }

 public int getAge() {
   return age;
 }

 public void setAge(int age) {
   this.age = age;
 }

 @Override
 public String toString() {
   return "User [username=" + username + ", password=" + password + ", age=" + age + "]";
 }
 
}

第二步:创建一个数据层

package com.jl.demo;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:
 * @Date: 2021/9/1
 * @Time: 15:55
 **/
public class UserDao {
 
 public List<User> queryUserList() {
   
   ArrayList<User> list = new ArrayList<User>();
   
   // 模拟数据库数据
   for (int i = 0; i < 10; i++) {
     User user = new User();
     user.setUsername("username" + i);
     user.setPassword("password" + i);
     user.setAge(1 + i);
     list.add(user);
   }
   return list;
 }

}

第三步:创建业务层

package com.jl.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:业务层
 * @Date: 2021/9/1
 * @Time: 16:23
 **/
@Service
public class UserService {

 @Autowired
 private UserDao userDao;
 
 public List<User> queryUserList() {
   // 调用Dao的查询用户方法进行查询
   return userDao.queryUserList();
 }
}

第五步:配置文件

package com.jl.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:配置文件类
 * @Date: 2021/9/1
 * @Time: 16:33
 **/

@Configuration // 声明为一个配置文件
@ComponentScan(basePackages="com.jl.demo") //扫描包
public class SpringConfig {
 
 @Bean  // 通过这个注解来标明这是一个Bean对象,相当于xml文件中的<bean>
 public UserDao getUserDao() {
   return new UserDao();
 }

}

前面的四步相信大家已经很熟悉了,可能就是这步大家之前要是没接触可能瞬间跟我一样,有点看不太明白,在整个项目里面找xml配置文件,结果发现却根本没有配置文件!

简单说一下这三个注解的作用:

@Configuration:这个注解其实就是把我们当前的这个类,声明为一个配置文件,它就相当于我们的xml配置文件,跟它的作用是一样的,只不过用类的方式来进行展现;

@ComponentScan(basePackages=“包路径”):这个注解其实就是去扫描我们的包路径,对我们需要扫描的包进行扫描,如果需要扫描多个包,之间用逗号隔开即可;

@Bean:这个注解其实更好理解,它就相当于xml中的,我们之前通过标签将它注入到容器中,现在只需要在你所需要注入的资源上面加上@Bean注解,就可以注入到Spring容器中;

第六步:测试

package com.jl.demo;

import java.util.List;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created with Intellij IDEA
 *
 * @Author: jinlei
 * @Description:测试方法
 * @Date: 2021/9/1
 * @Time: 16:43
 **/
public class Test {

 @SuppressWarnings("resource")
 public static void main(String[] args) {
   
   // 通过Java配置的方式实例化Spring容器
   AnnotationConfigApplicationContext applicationContext = new 
       AnnotationConfigApplicationContext(SpringConfig.class);
   
   // 在Spring容器中获取Bean对象
   UserService userService = applicationContext.getBean(UserService.class);
   
   // 调用对象中的方法
   List<User> userList = userService.queryUserList();
   
   for (User user : userList) {
     System.out.println(user);
   }
   
   // 销毁容器
   applicationContext.destroy();
 }
 
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值