Spring学习笔记

Spring学习笔记

一.使用set注入实现复杂类型集合数据
1.实体类
/**
 * 地址实体类
 */
public class Address {
    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Address{" +
                "address='" + address + '\'' +
                '}';
    }
}

/**
 * 学生实体类
 */
public class Student {
    private String name;
    private Address address;
    private String[] books;
    private List hobbys;
    private Map cards;
    private Set games;
    private String wife;
    private Properties info;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String[] getBooks() {
        return books;
    }

    public void setBooks(String[] books) {
        this.books = books;
    }

    public List getHobbys() {
        return hobbys;
    }

    public void setHobbys(List hobbys) {
        this.hobbys = hobbys;
    }

    public Map getCards() {
        return cards;
    }

    public void setCards(Map cards) {
        this.cards = cards;
    }

    public Set getGames() {
        return games;
    }

    public void setGames(Set games) {
        this.games = games;
    }

    public String getWife() {
        return wife;
    }

    public void setWife(String wife) {
        this.wife = wife;
    }

    public Properties getInfo() {
        return info;
    }

    public void setInfo(Properties info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", address=" + address.toString() +
                ", books=" + Arrays.toString(books) +
                ", hobbys=" + hobbys +
                ", cards=" + cards +
                ", games=" + games +
                ", wife='" + wife + '\'' +
                ", info=" + info +
                '}';
    }
}
2.配置文件



    
        
    

    
        
        
        
        
        
        
            
                红楼
                西游
                水浒
                三国
            
        

        
        
            
                吃饭
                唱歌
            
        

        
        
            
                
                
            
        

        
        
           
               lol
               coc
               bob
           
        

        
        
             
        

        
        
            
                1512021452
                
                lucky
                123456
            
        
    

3.测试类
   public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Di.xml");
        Student student = (Student) context.getBean("student");
        System.out.printf(student.toString());

    }
4.输出
Student{name='zhangsan', address=Address{address='beijing'}, books=[红楼, 西游, 水浒, 三国], hobbys=[吃饭, 唱歌], cards={身份证=125412541254125412, 银行卡=6521458754265456}, games=[lol, coc, bob], wife='null', info={学号=1512021452, 性别=男, 姓名=lucky, 密码=123456}}

二 、自动装配
1.实体类
public class Cat {
   public void shout(){
       System.out.println("miao--");
   }
}
public class Dog {

    public void shout(){
        System.out.println("wang--");
    }
}
public class People {

    private Cat cat;

    private Dog dog;

    private String name;


    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}

配置文件
1.byName自动装配:
  • 会自动在容器上下文中查找跟自己对象set方法后面的值对应的beanId(name必须相同)
  • xml配置
- 


   
   

    
        
    

2.byType自动装配
  • 会自动在容器上下文中查找跟自己对象属性类型相同的bean(必须类型全局唯一)
  • xml配置



  
  

   
       
   

 
 小结:
       byName自动装配需要保证所有bean的id唯一,并且bean需要跟自动注入的set方法的值一致
       byType自动装配需要保证所有bean的class唯一,并且bean需要跟自动注入的属性的类型一致
三.使用注解自动装配
  要使用注解须知:
    1.导入约束
    2.配置注解的支持   
        
        
             ****
        
注解说明
  • @Autowired是默认通过ByType的方式实现,而且必须要求这个对象存在
    如果@Autowired 自动装配的环境比较复杂 无法通过一个注解完成的时候,我们可以使用@Qualifier(value = “xxx”) 配合
  • @Resource是默认通过ByName的方式实现,如果找不到则通过ByType的方式 实现,如果都找不到就报错
  • @Nullable 字段标记了这个注解 说明这个字段可以为null
  • @Component 放在类上 说明这个类被spring管理了
使用注解开发
  • 在spring4之后要是用注解开发,必须导入aop的包
  • 要导入context的约束,增加注解的支持

    
    
    
    

  • 1.属性如何注入
@Component
public class User {

    public String name;
    
    // 相当于
    @Value("kk")
    public void setName(String name) {
        this.name = name;
    }
}
  • 2.衍生的注解
@Component有几个衍生注解 我们在web开发中会按照mvc分层
 - dao [@Repository]
 - service层 [@service]
 - controller [@Controller]
 - 这四个注解功能都是一样的,都是代表将某个类注册到spring容器中装配Bean
  • 4.作用域
  • Spring作用域
  • Spring学习笔记_第1张图片
@Component
@Scope("singleton")
public class User {

    public String name;

    // 相当于
    @Value("zhangsan")
    public void setName(String name) {
        this.name = name;
    }
}
  • 5.小结
    • xml与注解
      • xml更加万能,适用于任何场合,维护简单方便
      • 注解 不是自己的类使用不了,维护相对复杂
    • xml与注解最佳实践
      • xml用来管理bean
      • 注解只负责完成属性的注入
      • 我们在使用过程中只需要注意一个问题,想要让注解生效,就必须开启注解的支持

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