spring_注入方式笔记

spring容器负责生成实例

  • Set注入
    这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口)
package com.bless.springdemo.action; 
public class SpringAction { 
//注入对象springDao 
private SpringDao springDao; 
//一定要写被注入对象的set方法 
public void setSpringDao(SpringDao springDao) { 
this.springDao = springDao; 
}
  1. 随后编写spring的xml文件,
  2. 中的name属性是class属性的一个别名,class属性指类的全名,因为在SpringAction中有一个公共属性Springdao,所以要在标签中创建一个标签指定SpringDao。
  3. 标签中的name就是SpringAction类中的SpringDao属性名,ref指下面,这样其实是spring将SpringDaoImpl对象实例化并且调用SpringAction的setSpringDao方法将SpringDao注入.
  • 构造器注入
    这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:
public class SpringAction { 
//注入对象springDao 
private SpringDao springDao; 
private User user;
public SpringAction(SpringDao springDao,User user){  
    this.springDao = springDao;  
    this.user = user;  
    System.out.println("构造方法调用springDao和user");  
}  

    public void save(){  
    user.setName("卡卡");  
    springDao.save(user);  
} 

  1. 在XML文件中同样不用的形式,而是使用标签,ref属性同样指向其它标签的name属性
  • 通过@Autowired注解实现自动装配,只要你注入的bean已经被spring管理就可以使用了
package com.cjwdemo.demoBySpring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.cjwdemo.demoBySpring.bean.Demo1;
import com.cjwdemo.demoBySpring.bean.Demo2;

@Configuration // @Configuration表示当前类为配置类
/*
 * @ComponentScan默认扫描当前包和子包的class文件
 * 有@Controller或@Component或@Service或@Repository则自动注册到spring管理
 */
@ComponentScan
public class Application {


    // 通过@Configuration和@Bean实现bean注册
    @Bean
    public Demo1 setDemo1() {
        return new Demo1();
    }

    public static void main(String[] args) {
        /*
         * ApplicationContext是BeanFactory的超类,需要通过配置类或xml配置文件创建出来,
         * 能通过该类直接获取spring管理的bean
         */
        ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        Demo1 demo1 = context.getBean(Demo1.class);
        demo1.test();
        Demo2 demo2 = context.getBean(Demo2.class);
        demo2.test();
    }
}
// 获取demo1 bean成功
// 获取demo1 bean成功

package com.cjwdemo.demoBySpring.bean;

public class Demo1 {

    public void test() {
        System.out.println("获取demo1 bean成功");
    }

}
package com.cjwdemo.demoBySpring.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Demo2 {

    @Autowired
    private Demo1 demo1;

    public void test() {
        demo1.test();
    }

}
  • 简单的spring项目

    4.0.0
    com.cjwdemo.demoBySpring
    demoBySpring
    war
    0.0.1-SNAPSHOT
    demoBySpring Maven Webapp
    http://maven.apache.org
    
        
            junit
            junit
            4.12
            test
        
        
            org.springframework
            spring-context
            4.3.8.RELEASE
        

    
    
        demoBySpring
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                
            
        
    


你可能感兴趣的:(spring_注入方式笔记)