栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring从入门到入土(bean的一些子标签及注解的使用)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring从入门到入土(bean的一些子标签及注解的使用)

目录

1.  使用无参构造创建对象

2.  使用有参构造创建对象

3.  带有类类型属性的构造器创建对象

4.  使用Set方法传递参数

 5. 集合, 数组的参数传递

6.  注解的使用

 6.1 类注解的使用

 6.1 @Value注解的使用

 6.2 类类型属性注解的使用

6.3 单例多例注解的使用

6.4 @PostConstruct和@PreDestroy注解的使用

6.5 通过字节码获取对象


类目录结构 

public class Cpu {
    private Integer num;
    private String cpuName;
    private String factory;

    public Cpu() {
    }

    public Cpu(Integer num, String cpuName, String factory) {
        this.num = num;
        this.cpuName = cpuName;
        this.factory = factory;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public void setCpuName(String cpuName) {
        this.cpuName = cpuName;
    }

    public void setFactory(String factory) {
        this.factory = factory;
    }

    @Override
    public String toString() {
        return "Cpu{" +
                "num=" + num +
                ", cpuName='" + cpuName + ''' +
                ", factory='" + factory + ''' +
                '}';
    }
}
public class Computer {
    private Integer num;
    private String computerName;
    private Cpu cpu;

    public Computer() {
    }

    public Computer(Integer num, String computerName, Cpu cpu) {
        this.num = num;
        this.computerName = computerName;
        this.cpu = cpu;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public void setComputerName(String computerName) {
        this.computerName = computerName;
    }

    public void setCpu(Cpu cpu) {
        this.cpu = cpu;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "num=" + num +
                ", computerName='" + computerName + ''' +
                ", cpu=" + cpu +
                '}';
    }
}
public class SuperComputer {
    private String[] computerNames;
    private List factorys;
    private Set cpus;
    private Map users;
    private Properties userGirls;

    public void setComputerNames(String[] computerNames) {
        this.computerNames = computerNames;
    }

    public void setFactorys(List factorys) {
        this.factorys = factorys;
    }

    public void setCpus(Set cpus) {
        this.cpus = cpus;
    }

    public void setUsers(Map users) {
        this.users = users;
    }

    public void setUserGirls(Properties userGirls) {
        this.userGirls = userGirls;
    }

    @Override
    public String toString() {
        return "SuperComputer{" +
                "computerNames=" + Arrays.toString(computerNames) +
                ", factorys=" + factorys +
                ", cpus=" + cpus +
                ", users=" + users +
                ", userGirls=" + userGirls +
                '}';
    }
}


1.  使用无参构造创建对象

在xml文件中加入

    @Test
    public void cpuTest(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        Cpu bean1 = (Cpu) context.getBean("cpu");
        System.out.println(bean1);

    }

 

2.  使用有参构造创建对象
    
        
        
        
        
        
        
    
    @Test
    public void cpuTest(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        Cpu bean1 = (Cpu) context.getBean("cpu");
        System.out.println(bean1);

    }

3.  带有类类型属性的构造器创建对象
   @Test
    public void cpuTest(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        Computer computer = (Computer) context.getBean("computer");
        System.out.println(computer);
    }
    
        
        
        
        
        
        
    
    
    
        
        
        
    

    
        
        
        
            
                
                
                
            
        
    

4.  使用Set方法传递参数
    @Test
    public void cpuTest(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        Computer computer1 = (Computer) context.getBean("computer1");
        System.out.println(computer1);
    }
    
        
        
        
        
        
        
    
    
    
        
        
        
        
        
    

 5. 集合, 数组的参数传递
    @Test
    public void cpuTest(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        SuperComputer superComputer = (SuperComputer) context.getBean("superComputer");
        System.out.println(superComputer);
    }
   
        
            
                MacPro
                外星人
            
        

        
            
                因特尔工厂
                苹果工厂
            
        

        
            
                
                    
                    
                    
                
                
                    
                    
                    
                
            
        

        
            
                
                
            
        

        
            
                貂蝉
                西施
            
        
    

6.  注解的使用
    
    

 6.1 类注解的使用
    @Component
    @Service        业务层
    @Controller     表现层
    @Repository     持久层
//@Component(value = "cpu")
@Component     //默认id: 类名首字母小写

//@Service(value = "cpu")
//@Service

//@Controller(value = "cpu")
//@Controller

//@Repository(value = "cpu")
//@Repository

public class Cpu {
    private Integer num;
    private String cpuName;
    private String factory;

   //...此处省略(与上方对应类代码相同)
}
  @Test
    public void Test02(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        //注解的使用
        Cpu bean = (Cpu) context.getBean("cpu");
        System.out.println(bean);
    }

 6.1 @Value注解的使用
@Component     //默认id: 类名首字母小写
public class Cpu {
    @Value("666")
    private Integer num;
    @Value("因特尔")
    private String cpuName;
    @Value("InterFactory")
    private String factory;

    //....此处省略(与上面代码一样)
}

 6.2 类类型属性注解的使用
@Autowired
@Qualifier(value = "cpu")

@Resource(name = "cpu")
@Component
public class Computer {
    private Integer num;
    private String computerName;
    @Autowired
    @Qualifier(value = "cpu")

    //@Resource(name = "cpu")
    private Cpu cpu;

   //...此处省略(与上方对应类代码相同)
}

6.3 单例多例注解的使用
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)  //单例
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)  //多例
public class Computer {
    ......
}

6.4 @PostConstruct和@PreDestroy注解的使用
@Component
public class Computer {
    private Integer num;
    private String computerName;
    @Autowired
    @Qualifier(value = "cpu")
    private Cpu cpu;

    //...此处省略(与上方对应类代码相同)
    
//创建容器时调用
    @PostConstruct
    public void initMethod(){
        System.out.println("容器被创建!");
    }
//销毁容器时调用
    @PreDestroy
    public void destroyMethod(){
        System.out.println("容器被销毁!");
    }
}
   @Test
    public void Test02(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        ((ClassPathXmlApplicationContext)context).close();
    }

单例模式下:  

6.5 通过字节码获取对象
  @Test
    public void Test02(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring_bean.xml");

        //通过字节码拿到对象
        //缺点: 当配置了多个bean时, 因为字节码是相同的,因此会造成混淆(不知道给你返回哪一个bean)
        Cpu bean = context.getBean(Cpu.class);
        System.out.println(bean);
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号