java-spring创建bean对象的三种方式(无参构造、静态工厂、普通工厂)-----bean标签的使用以及bean的生命周期

dao层

package com.chinasoft.dao;

public interface UserDao {
    
    
    void findAll();
}

package com.chinasoft.dao.impl;

import com.chinasoft.dao.UserDao;

public class UserDaoImpl implements UserDao {
    
    
    @Override
    public void findAll() {
    
    
        System.out.println("UserDao启动...");
    }
}

factory

package com.chinasoft.factory;


import com.chinasoft.dao.UserDao;
import com.chinasoft.dao.impl.UserDaoImpl;

/**
 *   普通工厂
 */
public class NormalFactory {
    
    


    /**
     *   使用工厂创建对象
     * @return
     */
    public UserDao createDao(){
    
    
        return new UserDaoImpl();
    }

}

package com.chinasoft.factory;


import com.chinasoft.dao.UserDao;
import com.chinasoft.dao.impl.UserDaoImpl;

/**
 *   静态工厂
 */
public class StaticFactory {
    
    

    /**
     * 使用静态方法创建的对象
     * @return
     */
    public static UserDao createDao(){
    
    
        return new UserDaoImpl();
    }

}

service层

package com.chinasoft.service;

public interface UserService {
    
    
    void findAll();
}

package com.chinasoft.service.impl;



import com.chinasoft.service.UserService;

public class UserServiceImpl implements UserService {
    
    
    @Override
    public void findAll() {
    
    
        System.out.println("业务层运行了");

    }

    public void init(){
    
    
        System.out.println("初始化方法被调用");
    }

    public void destroy(){
    
    
        System.out.println("销毁方法被执行");
    }
}

web层

package com.chinasoft.web;


import com.chinasoft.dao.UserDao;
import com.chinasoft.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserWeb {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = (UserService)app.getBean("userService");
        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.findAll();
        userService.findAll();
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>chinasoft</groupId>
    <artifactId>test1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.6</version>
        </dependency>
    </dependencies>

</project>

bean.xm

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--
            spring管理bean的细节
              bean标签:
                    作用:用来配置让spring创建的对象
                    属性:
                        id:  唯一标识
                        class: 需要创建的对象的全限定类名
                        scope: 用来指定bean作用范围
                           singleton:  单例的(默认值)
                           prototype:  多例的
                           session:     作用于web应用的会话范围
                           global-session: 作用于web应用的全局回话
                        init-method: 在创建对象时调用初始化方法  只执行一次
                        destroy-method: 在指定类销毁的时候调用方法


         spring创建bean对象的三种方式:
            1.使用默认无参构造方法
            2.使用普通工厂的方法创建
            3.使用静态工厂的方法创建
      -->

    <!--    1.使用默认无参构造方法   -->
    <bean id="userService" class="com.chinasoft.service.impl.UserServiceImpl" init-method="init" destroy-method="destroy"  ></bean>

    <!--  2.使用普通工厂的方法创建 -->
    <!--    <bean id="normalFactroy" class="com.chinasoft.factory.NormalFactory"></bean>-->
    <!--    <bean id="userDao" factory-bean="normalFactroy" factory-method="createDao"></bean>-->


    <!--   3.使用静态工厂的方法创建  -->
    <bean id="userDao" class="com.chinasoft.factory.StaticFactory" factory-method="createDao"></bean>

    <!--
        bean的生命周期:
           singleton(单例):
                       对象的初始化:当应用加载,创建容器的时候,对象被初始化
                       对象的存活:  只要容器在对象就一直活着
                       对象的销毁:   容器销毁时,对象也销毁
           prototype(多例):
                       对象的初始化: 当使用对象时,创建新的对象
                       对象的存活:   只要对象一直在被使用,则存活着
                       对象的销毁:    当对象长时间不使用,被java中的GC回收
    -->

</beans>

猜你喜欢

转载自blog.csdn.net/m0_56981185/article/details/127505070
今日推荐