SpringIOC

2020-08-06T20:30:57
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

元数据的配置有三种方式

1. XML- based configuration 基于XML文件配置

1.1 配置文件 spring-beans.xml

<?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">

	<!-- IOC: 控制反转 ; 反射根据字节码去获取的对象
		id:唯一标识(属性名称)
		class:类全名(全类名)
	-->
	<bean   class="com.entity.Person"></bean>
	<!-- DI: 依赖注入: 赋值的过程交给spring -->
	<bean   class="com.dao.impl.LoginDaoImpl"></bean>

	<!-- 在service里面需要一个loginDao -->

		<!-- 通过set方法进行注入的 -->
		<!-- <property name="loginDao" ref="loginDao"></property> -->
	<bean     >
		<!--<property name="loginDao" ref="loginDao"></property>-->
	</bean>
</beans>

1.2 在dao层创建接口 LoginDao

package com.dao;
public interface LoginDao {
    void show();
}

1.3 在dao层创建实现类 LoginDaoImpl

package com.dao.impl;
import com.dao.LoginDao;
import org.springframework.stereotype.Component;
public class LoginDaoImpl implements LoginDao {
    @Override
    public void show() {
        System.out.println("dao 的show方法");
    }
}

1.4 在service层创建接口 LoginService

package com.service;
public interface LoginService {
    void show();
}

1.5 在service层创建实现类 LoginServiceImpl

package com.service.impl;
import com.dao.LoginDao;
import com.dao.impl.LoginDaoImpl;
import com.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
public class LoginServiceImpl implements LoginService {
    // LoginDao loginDao = new LoginDaoImpl();
    private LoginDao loginDao;
    @Override
    public void show() {
        System.out.println("service 的show方法");
        loginDao.show();
    }
    public void setLoginDao(LoginDaoImpl loginDao) {
            this.loginDao = loginDao;
    }
}

1.6 测试代码

package com.test;
import com.service.LoginService;
import com.service.impl.LoginServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIOC2 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
        Object object = context.getBean("loginService");
        LoginService loginService = (LoginService) object;
        loginService.show();
    }
}

2. Annotation-based configuration 基于注解配置

2.1 配置文件 spring-beans-anno.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
    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
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
	<!-- 等同于我们spring配置一个 bean -->
	<context:annotation-config></context:annotation-config>
	<!-- spring启动的时候,需要扫描那些包; base 根 -->
	<context:component-scan base-package="com"></context:component-scan>
</beans>

2.2 在dao层创建接口 LoginDao

public interface LoginDao {
    void show();
}

2.3 在dao层创建实现类 LoginDaoImpl

@Component
public class LoginDaoImpl implements LoginDao {
    @Override
    public void show() {
        System.out.println("dao 的show方法");
    }
}

2.4 在service层创建接口 LoginService

public interface LoginService {
    void show();
}

2.5 在service层创建实现类 LoginServiceImpl

// 注解表明该类会作为组件类, 并告知Spring要为此类创建bean
@Component
public class LoginServiceImpl implements LoginService {
    // LoginDao loginDao = new LoginDaoImpl();
    // 注解申明了依赖, 自动装配, 可以用于属性和set方法
    @Autowired
    private LoginDao loginDao;
    @Override
    public void show() {
        System.out.println("service 的show方法");
        loginDao.show();
    }
}

2.6 测试代码

package com.test;
import com.service.LoginService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIOC3 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans-anno.xml");
        // LoginService object = (LoginService)context.getBean("loginServiceImpl");
        LoginService object = (LoginService)context.getBean(LoginService.class);
        object.show();
    }
}

3. Java-based configuration基于Java代码配置

3.1 配置文件 BeanConfig

package com.ioconfig;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
// 注解表明此类为配置类, 包含了Spring应用上下文中如何创建bean的细节
@Configuration
// 注解表明在指定包下扫描带有Component注解的类, 并为其创建bean
@ComponentScan("com")
public class BeanConfig {
}

3.2 和基于注解配置一样,创建Dao和Service的接口和实现类

3.3 代码测试

package com.test;
import com.ioconfig.BeanConfig;
import com.service.LoginService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestIOC4 {
    public static void main(String[] args) {
       ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class);
        LoginService ls = (LoginService)ctx.getBean("loginServiceImpl");
        ls.show();
    }
}
扫一扫关注公众号添加购物返利助手,领红包
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »
因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合MIP标准。