创建Spring项目
若创建的是Java项目,向其加入Spring包;若创建的是Maven项目,添加如下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
编写类
public class Student {
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
// set、get方法
}
一、XML方式
通过spring的配置文件定义Bean,在src目录下新建spring-conf.xml文件(文件名称可自己定,也不用必须放到src下,程序编译后,保证文件在classpath下就行)
通过<bean>
标签定义一个Student Bean。bean标签的scope属性指明单实例还是多实例,默认是单实例bean。
<bean scope="singleton">
:单实例在容器启动完成之间就创建好对象,spring容器运行个过程中,每个bean是单实例的;
<bean scope="prototype">
:多实例在容器启动不会创建对象,获取bean对象时才创建,而且每获取一次,获得一个新对象
<?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.xsd">
<!-- student默认单实例 -->
<bean id="student" class="com.example.entity.Student">
<property name="id" value="10"/>
<property name="name" value="zhangsan"/>
</bean>
</beans>
测试:
public class MyMain {
public static void main(String[] args) {
// 读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring-conf.xml");
// 获得bean
Student student = context.getBean("student", Student.class);
System.out.println(student);
}
}
二、Java注解方式
在配置文件spring-conf.xml中,添加组件扫描,如果扫描到有@Component
、@Repository
、@Controller
、@Service
等注解的类,将此类注册为Bean。这类注解默认value值为类名首字母小写。注解的value中相当于xml配置文件中Bean的id值。
@Service
用于标注业务层组件
@Controller
用于标注控制层组件
@Repository
用于标注数据访问组件,即DAO组件
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.example.entity" />
</beans>
把注解加到Student类上
@Scope("singleton")
:指定为单实例;@Scope("prototype")
:指定为多实例
@Component
public class Student {
@Value(value = "20")
private int id;
@Value(value = "lisi")
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
// set、get方法
}
三、Java配置类方式
通过@Configurable
注解,把一个类变成Java配置类,@Bean
注解定义一个Bean,也可以通过@ComponentScan
注解指定扫描包
在@Bean
可加上注解@Scope("singleton")
:指定为单实例;@Scope("prototype")
:指定为多实例
//@ComponentScan("com.example.entity")
@Configurable
public class BeanConfig {
@Bean
//@Scope("singleton") 默认singleton
public Student student(){
return new Student(30, "wang");
}
}