目录
一、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);
    }
}
 
输出结果:
 


















