spring:将系统的各个组件交由spring托管,由spring来管理各个组件的生命周期,并由spring来约定各部组建的依赖关系。
IOC容器(控制反转)DI(依赖注入)
AOP:面向切面(接口编程)
特点:
1.方便解耦,简化开发
将系统的各个组件由spring来统一管理。通过spring的ioc容器,将各个组件对象之间的依赖关系有spring控制。
通过注入setter…来实现各部组建的引用关系,从而实现松耦合。
2.AOP 面向切面(接口)
3.支持注解开发(springmvc)
4.支持各种框架集成
xml
第一:添加spring依赖包
spring-core核心容器:提供了spring框架基本功能。核心容器的主要组件BeanFactory
spring是通过Bean,来管理各部组件。
第二:配置spring主配置文件applicationContext.xml
ApplicationContext:Spring上下文接口,配置接口,提供了获取bean的方法,包括:数据源,国际化…
控制反转(IOC和DI):实际上spring通过IOC或DI促进各部组件的松耦合。我们系统的各个组件由spring托管,
当一个对象依赖另一个对象时,再次引用对象中使用setter注入,将被引用的对象实例注入至引用对象中。
反过来说:引用对象依赖于被引用对象。
面向切面:接口编程,主要是允许通过分离应用的业务逻辑与应用系统的服务(事物/事务管理器/数据源)业务剥离。
IOC操作Bean管理(基于xml方式)
1、基于xml方式创建对象
(1)在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
(2)在bean标签有很多属性,介绍常用的属性
id属性:唯一标识
class属性:类全路径(包类路径)
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
2、基于xml方式注入属性
(1)DI:依赖注入,就是注入属性
第一种注入方式:使用set方法进行注入
第二种注入方式:使用有参数构造进行注入
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" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- DI 或 IOC -->
<bean id="userDao" class="com.iweb.dao.UserDao">
<!-- ref 引用spring的Bean
spring通过ref的引用,将其引用的组件对象的实例注入器name属性
name属性必须在组件中提供setter方法
-->
<property name="user" ref="userBean" />
</bean>
<bean id="userDaoImpl" class="com.iweb.dao.impl.IUserDaoInterfaceImpl">
<property name="userDao" ref="userDao" />
</bean>
<!-- UserService -->
<bean id="userService" class="com.iweb.service.impl.IUserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="stu1" class="com.iweb.entity.Student">
<property name="name" value="张三" />
<property name="course" value="java"/>
<property name="score" value="80" />
</bean>
<bean id="stu2" class="com.iweb.entity.Student">
<property name="name" value="李四" />
<property name="course" value="python"/>
<property name="score" value="68" />
</bean>
<bean id="stu3" class="com.iweb.entity.Student">
<property name="name" value="王五" />
<property name="course" value="c++"/>
<property name="score" value="73" />
</bean>
</beans>
TestClass.java
package com.iweb.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.iweb.dao.UserDao;
import com.iweb.entity.Student;
import com.iweb.service.IUserService;
import com.iweb.service.impl.IUserServiceImpl;
public class TestClass {
private static final String _SPRING_APPLTCATTONCONTENT_FILES_ = "/applicationContext.xml";
public static void main(String[] args){
ApplicationContext act = new ClassPathXmlApplicationContext(_SPRING_APPLTCATTONCONTENT_FILES_);
IUserService userService = (IUserServiceImpl)act.getBean("userService");
Student s = (Student)act.getBean("stu1");
System.out.println(s.toString());
s = (Student)act.getBean("stu2");
System.out.println(s.toString());
System.out.println(((Student)act.getBean("stu3")).toString());
}
}
Student.java
package com.iweb.entity;
public class Student {
private String name;
private String course;
private double score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", course=" + course + ", score=" + score + "]";
}
}
UserDao.java
package com.iweb.dao;
import com.iweb.entity.User;
public class UserDao {
//setter注入法
private User user;
public void setUser(User user) {
this.user = user;
}
public void sayHello() {
System.out.println(user.getUname()+",sayHello!");
}
}
IUserService.java
package com.iweb.service;
public interface IUserService {
public void sayHello();
}
IUserServiceImpl.java
package com.iweb.service.impl;
import com.iweb.dao.UserDao;
import com.iweb.service.IUserService;
public class IUserServiceImpl implements IUserService{
//setter注入法
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void sayHello() {
userDao.sayHello();
}
}