spring框架:简介+依赖注入

目录

一、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包

        
            org.springframework
            spring-context
            5.2.2.RELEASE
        

2.编写spring配置文件




三、spring创建对象 

 1.在bean添加spring框架需要管理的类:

        如下class为类地址,id为唯一标识  

        设置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为值

    
        
        
        
    

        构造方法:name 为构造方法的参数名,value为传入参数的值

    
       
        
        
    

 属性含有对象时:

        例如: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的类:

spring框架:简介+依赖注入_第1张图片

测试:

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);
    }
}

输出结果:

spring框架:简介+依赖注入_第2张图片 

2.注入实现-注解

        开启注解扫描:

                在spring的xml配置文件中配置:此处配置的为需要扫描的包,包含里面所有的类

        添加约束:

        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd

添加后的spring.xml文件 




    

 相关注解:

实现创建对象功能:
@Component(value=“user”)等于
@Service:通常添加到Service层的类名之上
@Repository:通常添加到Dao层的类名之上
Scope设置:
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例

依赖注入:

  1.         @Autowired可以放在属性上,就可以不用set方法,通过属性的类型在spring容器中寻找
  2.         @Autowired @Qualifier 联合使用,要用标识:value=" ";
  3.         @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);
    }
}

 输出结果:

 spring框架:简介+依赖注入_第3张图片

 

 

你可能感兴趣的:(spring,java,后端)