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

spring之创建对象

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

spring之创建对象

一·IOC(控制反转)

       spring 容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,一句话,所有的对象都可以放在一个spring容器里,由spring容器来创建对象,而代码中只需要接受对象,spring容器可以为一个xml文件,在里面配置类,并可以在外面获取,控制权来到了spring容器这里。

二·导入jar包

从maven仓库中寻找依赖:

      
        
            org.springframework
            spring-webmvc
            5.3.10
        
三·Hellospring

创建实体类pojo,Hello类。

public class Hello {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + ''' +
                '}';
    }
}

创建beans.xml:

在xml文件中使用bean标签,id表示对象的名称,方便于被接受,class为当前pojo的全包名路径,

property标签设置实体类中的属性,这是基于实体类的set方法来实现的,如果没有set方法,则会报错,




    
        
    
    
        
    

外部获取不同的对象:

public class MyTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());

        hello = (Hello) context.getBean("hello2");
        System.out.println(hello);
    }
}
四:属性为对象的情况

UserDao接口:

public interface UserDao {
    void getUser();
}

实现类: 

public class UserMysqlDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Mysql获取数据");
    }
}
public class UserOracleDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Oracle获取数据");
    }
}
public class UserSqlServerDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("SqlServer获取数据");
    }
}

UserService接口:

public interface UserService {
    void getUser();
}

实现类:

public class UserServiceImpl implements UserService{
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}

beans.xml:

用ref去引用已经注册在容器的bean




    
    
    

    
        
    

测试:

修改beans.xml文件中UserService的属性配置,即可获取不同的UserDao,来获取不同数据库的数据,达到解耦的效果。

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserServiceImpl userService = (UserServiceImpl) context.getBean("UserService");

        userService.getUser();
    }
}
五·创建对象的方式

默认是通过无参构造创建

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

的时候就将对象实例化,后面直接获取就行。 

如下:

System.out.println("context之前");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("context之后");

beans.xml中有两个使用无参构造,所以输出为:

 

 

在也可以通过有参构造创建,创建时要保证有相应的构造方法。

1.通过name属性构造,属性的名称

2.通过属性的下标,从0开始

3.通过属性的类名,引用类型需要写全包名,不建议,解决不了重复类型的情况。


        
    
    
        
    
    
        
    
注意:在spring容器中获取的同id是同一个对象,以下输出为true! 
Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());

        Hello hello1 = (Hello) context.getBean("hello");
        System.out.println(hello==hello1);

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

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

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