目录
一、spring简介
二、创建项目
三、spring创建对象
四、SpringBean管理
1.注入实现-XML
2.注入实现-注解
一、spring简介
spring诞生与2003年,是一个轻量级的、IOC( Inversion Of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)的java开发框架,为了简化企业级应用开发。
二、创建项目
1.Maven导入spring核心基础jar包
添加spring-context jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
2.编写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>
三、spring创建对象
1.在bean添加spring框架需要管理的类:
如下class为类地址,id为唯一标识
<bean id="user" class="com.yyds.spring.bean.User" scope="prototype"></bean>
设置bean中的scope:
singleton:只创建一个bean对象,在启动spring时创建(默认形式)
prototype:在每次获取对象时创建,创建新的bean对象
2.启动spring:
spring.xml为spring的配置文件(含有约束和管理的类)
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
创建对象:其中参数user为bean管理类的id,第二个参数为该类的Class对象,我们让spring帮我们创建了对象,把创建对象的控制权限交给了spring框架,再也不用new对象,这就是IOC“反转控制”的思想。
User user = applicationContext.getBean("user", User.class);
System.out.println(user);
IOC 底层实现方式: 解析 xml/扫描注解标签 + 工厂模式 + 反射机制
四、SpringBean管理
依赖注入:创建对象时,需要为对象的属性进行赋值。
注入方式:
set方法
构造方法
1.注入实现-XML
set方法 :name 为属性名,value为值
<bean id="user2" class="com.yyds.spring.bean.User" scope="prototype">
<!--为属性赋值 通过set方法-->
<property name="id" value="100"></property>
<property name="name" value="张三"></property>
</bean>
构造方法:name 为构造方法的参数名,value为传入参数的值
<bean id="user3" class="com.yyds.spring.bean.User" scope="prototype">
<!-- 通过构造方法-->
<constructor-arg name="id" value="12"></constructor-arg>
<constructor-arg name="name" value="李四"></constructor-arg>
</bean>
属性含有对象时:
例如:UserService类中含有userDao对象,有userDao的set方法,实现对userDao中方法的调用:
public class UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void insert(User user) {
userDao.insertUser(user);
}
}
UserDao类
public class UserDao {
public void insertUser(User user){
System.out.println("保存成功");
}
}
XML如下,与为简单属性赋值的方式有一点不同,在property标签中的value要改为ref,表示引用此id的类:
测试:
public class TestUser{
@Test
public void test1(){
//启动spring
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
//spring创建user对象作userService.insert方法的为参数
User user = applicationContext.getBean("user3", User.class);
System.out.println(user);
//spring创建userService对象并创建属性为UserDao的对象
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.insert(user);
}
}
输出结果:
2.注入实现-注解
开启注解扫描:
在spring的xml配置文件中配置:此处配置的为需要扫描的包,包含里面所有的类
<context:component-scan base-package="com.yyds.spring"></context:component-scan>
添加约束:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
添加后的spring.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
https://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.yyds.spring"></context:component-scan>
</beans>
相关注解:
实现创建对象功能:
@Component(value=“user”)等于<bean id=“user” class=“”></bean>
@Service:通常添加到Service层的类名之上
@Repository:通常添加到Dao层的类名之上
Scope设置:
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例
依赖注入:
- @Autowired可以放在属性上,就可以不用set方法,通过属性的类型在spring容器中寻找
- @Autowired @Qualifier 联合使用,要用标识:value=" ";
- @Resource可以通过类型和标识找,有无name=“ ”都可以。
@Autowired和@Qualifier是spring框架提供的,@Resource是JDK提供的。
示例:
@Service
public class UserService {
@Resource
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void insert(User user) {
userDao.insertUser(user);
}
}
@Repository
public class UserDao {
public void insertUser(User user){
System.out.println("保存成功");
}
}
public class Test {
@Test
public void test1(){
//启动spring
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
User user1 = applicationContext.getBean("user", User.class);
UserService userService = applicationContext.getBean(UserService.class);
userService.insert(user1);
}
}
输出结果: