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();
}
}