Sring框架-IOC篇
一.什么是Spring框架
Spring是一个轻量级的,IOC和AOP的一站式JAVA开发框架,是为了简化企业级应用开发而生的
1.IOC(Inversion of Control)
反转控制,是由Spring 管理对象而非传统实现中由程序代码直接操控
2.AOP(Aspect Oriented Programming)
面向切面编程,AOP是一种编程思想,是面向对象编程的一种补充
3.Spring体系结构
二.Spring的搭建
1.创建一个Maven项目
2.在pom.xml文件中导入Spring核心依赖Spring context
<!-- spring-context -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version>
</dependency>
3.编写spring配置文件
首先在resources目录下创建spring配置文件application.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.ff.spring.model.User"> </bean>
</beans
三.IOC(控制反转)
先创建model包,dao包,service包.
创建实体类User
public class User {private int no;private String name;public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
UserDao
public class UserDao {public void save(){System.out.println("Hello world");}
}
UserService
public class UserService {User user;UserDao userDao;public void save(){userDao.save();}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}
}
1.基于xml配置方式
在spring中配置我们的类,将我们的类交给spring管理(哪个类需要让Spring管理,就将该类配置到Spring中)
<bean id="属性名" class="类的地址(eg:springpro.model.User)"></bean>
我们写一个测试类,测试使用Spring是否可以获取User对象
//启动spring框架,读取配置文件,最原始的写法,
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application1.xml");
User user = applicationContext.getBean("user",User.class);
System.out.println(user1);
如果我们同时获取两个User对象并打印出来,可以发现两个User对象的地址相同,这说明Spring框架实际上只给我们生成了一个User对象,这是因为bean标签中有一个属性Scope
Spring生成对象的作用域:
Scope属性值为singleton则是单列模式(Spring只生成一个唯一的对象)
Scope属性值为prototype则是原型(每次getBean()都会生成一个新的对象)
scope的默认值是singleton
如果一个类(UserService)中调用了其他类,在从Spring中获取前我们需要进行在xml文件中配置.
为对象赋值的方式有两种:
1>set方法赋值
<bean id="userService" class="springpro.service.UserService"><property name="userDao" ref="userDao"> </property><property name="user" ref="user"> </property></bean>
2>构造器赋值
<bean id="userService" class="springpro.service.UserService"><!--创建对象,并为属性注入值--><constructor-arg name="userDao" ref="userDao"></constructor-arg><constructor-arg name="user" ref="user"></constructor-arg>
</bean>
使用set方法赋值时,必须有对应的set方法
使用构造器赋值时,必须有对应的构造方法
配置完之后,生成对象时Spring框架会自动为我们赋值
2.基于注解配置方式
1.首先开启注解扫描
在application.xml文件中添加
<!--配置spring对哪个包下的类进行扫描-->
<context:component-scan base-package="包名"></context:component-scan>
Spring就会对这个包下面所有的类进行扫描
2.为类添加注解标签
1>生成对象的注解
@Component,@Service,@Repository以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的业务层使用不同的注解标记
@Scope用于控制生成对象作用域
2>属性注入的注解:
@Autowired,@Resource都可以让Spring给对象赋值,前提是注入的对象必须存在,如果对象不存在会报错
可以根据类名去spring框架中查找,也可以通过属性名去spring框架中查找
@Autowried,需要通过@Qualifier(value="属性名")注解去指定属性名
@Resource(name="属性名")