目录
9 Spring注解之@Autowired:Setter 方法上使用@Autowired注解
1 Spring程序开发步骤
①导入 Spring 开发的基本包坐标
②编写 Dao 接口和实现类
③创建 Spring 核心配置文件
④在 Spring 配置文件中配置 UserDaoImpl
⑤使用 Spring 的 API 获得 Bean 实例
注意事项:
之后无法注入
2 导入Spring开发的基本包坐标
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<!--导入spring的context坐标,context依赖core、beans、expression-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
3 编写Dao接口和实现类
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("UserDao save method running....");
}
}
4 创建Spring核心配置文件
<?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">
</beans>
5 在Spring配置文件中配置UserDaoImpl
<bean id="userDao" class="com.zgl.dao.impl.UserDaoImpl"></bean>
6 使用Spring的API获得Bean实例
package com.zgl.demo;
import com.zgl.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserDaoDemo {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
7 项目结构
8 运行效果
9 Spring注解之@Autowired:Setter 方法上使用@Autowired注解
可以在 JavaBean中的 setter 方法中使用 @Autowired 注解。当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解时,它会在方法中按照类型自动装配参数值。创建测试类User,并且添加属性student,
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @author oldlu
*/
@Component
public class User implements Serializable {
private static final long serialVersionUID = 6089103683553156328L;
private Long id;
private Student student;
public Student getStudent() {
return student;
}
@Autowired
public void setStudent(Student student) {
this.student = student;
}
public void isStu() {
student.studentStudy();
System.out.println("------ 装配Bean成功 ---------");
}
}
下面创建依赖的类文件 Student.java,切莫忘记在类文件上添加注解 @Component:
import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
/**
* @author oldlu
*/
@Getter
@Setter
@Component
public class Student implements Serializable {
private static final long serialVersionUID = -5246589941647210011L;
//姓名
private String name;
public Student() {
System.out.println("A default student constructor." );
}
public void studentStudy() {
System.out.println("A student is studying." );
}
}
修改Spring Boot启动类,通过Spring容器拿到Bean实例user:
import com.east7.bean.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
/**
* @author oldlu
*/
@SpringBootApplication
public class East7Application {
public static void main(String[] args) {
ApplicationContext act = SpringApplication.run(East7Application.class, args);
User user = (User) act.getBean("user");
user.isStu();
}
}
启动应用程序,控制台将会输出以下消息:
A default student constructor.
A student is studying.
------ 装配Bean成功 ---------
说明student属性被装配成功。如果setStudent方法不加注解,程序运行时,会抛出如下异常:
Exception in thread "main" java.lang.NullPointerException
at com.east7.bean.User.isStu(User.java:28)
at com.east7.East7Application.main(East7Application.java:25)