zoukankan      html  css  js  c++  java
  • Spring配置过程(一)反转控制/依赖注入IOC

    一  配置过程

    1. 创建一个项目


    2. 导包
        Spring的包
        commons-logging(日志)

        jstl

       Junit(可不加,用于单元测试)

        
    3.编写Dao层和Service层

    4. 创建配置文件 beans.xml   (ApplicationContext.xml)
        beans的节点
            bean节点
                id
                class
                

    5. 测试代码

    二  示例

    配置文件实现

    1.创建项目SpringDemo2

    2.导入需要的包

    3.创建实体类User

    package com.hp.pojo;
    
    public class User {
    	private int id;
    	private String username;
    	private String password;
    	
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
    	}
    }
    

    创建Dao层接口IUserDao

    package com.hp.dao;
    
    public interface IUserDao {
    	int login(String username,String password);
    }
    

    创建Dao层实现类UserDaoImpl.java

    package com.hp.dao.impl;
    
    import com.hp.dao.IUserDao;
    
    public class UserDaoImpl implements IUserDao {
    
    	@Override
    	public int login(String username, String password) {
    		if("admin".equals(username) && "123".equals(password)){
    			return 1;
    		}
    		return 0;
    	}
    
    }
    

    创建Service层接口IUserService

    package com.hp.service;
    
    public interface IUserService {
    	int login(String username,String password);
    }
    

    创建Service层实现类UserServiceImpl.java

    package com.hp.service.impl;
    
    import com.hp.dao.IUserDao;
    import com.hp.service.IUserService;
    
    public class UserServiceImpl implements IUserService {
    	private IUserDao iUserDao;
    	
    	public void setiUserDao(IUserDao iUserDao) {
    		this.iUserDao = iUserDao;
    	}
    
    	@Override
    	public int login(String username, String password) {
    		// TODO Auto-generated method stub
    		return iUserDao.login(username, password);
    	}
    }
    

    4.创建配置文件ApplicationContext.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"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd
                                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    			
    		<bean id="IUserDao" class="com.hp.dao.impl.UserDaoImpl" />
    		
    		<bean id="IUserService" class="com.hp.service.impl.UserServiceImpl">
    		<!-- Set注入 -->
    			<property name="iUserDao"  ref="IUserDao"></property>			
    		</bean>
    </beans>
    

    5.创建测试类MainTest

    package com.hp.test;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.hp.dao.IUserDao;
    import com.hp.dao.impl.UserDaoImpl;
    import com.hp.service.IUserService;
    import com.hp.service.impl.UserServiceImpl;
    
    public class MainTest {
    	/*
    	 * 原始方法
    	 */
    	@Test
    	public void login(){
    		String username="admin";
    		String password="123";
    		
    		IUserDao iUserDao=new UserDaoImpl();
    		IUserService iUserService=new UserServiceImpl();
    		int res = iUserService.login(username, password);
    		if(res==1){
    		     System.out.println("登录成功");
    		}
    		else{
    	             System.out.println("登录失败");
    		}
    	}
    	
    	/*
    	 * 松耦合
    	 */
    	@Test
    	public void login1(){
    		String username="admin";
    		String password="123";
    		ClassPathXmlApplicationContext context=
    				new ClassPathXmlApplicationContext("ApplicationContext.xml");
    		IUserService iUserService=(IUserService) context.getBean("IUserService");
    		int res = iUserService.login(username, password);
    		if(res==1){
    		      System.out.println("登录成功");
    		}
    		else{
    	              System.out.println("登录失败");
    		}
    	}
    }
    

    6.项目结构:



    注解实现

    1.创建项目SpringDemo3

    2.导入需要的包(同上)

    3.创建实体类User(同上)
    创建Dao层接口IUserDao

    package com.hp.dao;
    
    public interface IUserDao {
    	int login(String username,String password);
    }
    
    创建Dao层实现类UserDaoImpl.java

    package com.hp.dao.impl;
    
    import org.springframework.stereotype.Repository;
    
    import com.hp.dao.IUserDao;
    
    @Repository("IUserDao")
    public class UserDaoImpl implements IUserDao {
    
    	@Override
    	public int login(String username, String password) {
    		if("admin".equals(username) && "123".equals(password)){
    			return 1;
    		}
    		return 0;
    	}
    
    }
    
    创建Service层接口IUserService

    package com.hp.service;
    
    public interface IUserService {
    	int login(String username,String password);
    }
    
    创建Service层实现类UserServiceImpl.java
    package com.hp.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.hp.dao.IUserDao;
    import com.hp.service.IUserService;
    /*
     * @Service注解的作用等同于
     * <bean id="IUserService" class="com.hp.service.impl.UserServiceImpl"/>
     */
    @Service("IUserService")    //不给值时,默认类名
    public class UserServiceImpl implements IUserService {
    	
    	@Autowired   //不指定值时按名称IUserDao去找
    	private IUserDao iUserDao;
    	
    	public void setiUserDao(IUserDao iUserDao) {
    		this.iUserDao = iUserDao;
    	}
    
    	@Override
    	public int login(String username, String password) {
    		// TODO Auto-generated method stub
    		return iUserDao.login(username, password);
    	}
    
    }
    
    4.创建配置文件ApplicationContext.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"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd
                                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    		
    		<!-- spring注解 -->
    		<context:component-scan base-package="com.hp"/>
    		<!-- <context:component-scan base-package="com.hp.dao, com.hp.service"/>		 -->
    </beans>
    
    5.创建测试类MainTest

    package com.hp.test;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.hp.dao.IUserDao;
    import com.hp.dao.impl.UserDaoImpl;
    import com.hp.service.IUserService;
    import com.hp.service.impl.UserServiceImpl;
    
    public class MainTest {
    	
    	@Test
    	public void login1(){
    		String username="admin";
    		String password="123";
    		ClassPathXmlApplicationContext context=
    				new ClassPathXmlApplicationContext("ApplicationContext.xml");
    		IUserService iUserService=(IUserService) context.getBean("IUserService");
    		int res = iUserService.login(username, password);
    		if(res==1){
    		System.out.println("登录成功");
    		}
    		else{
    			System.out.println("登录失败");
    		}
    	}
    }
    

    6.项目结构:



    三  注解方式的使用

        <!--spring注解-->
        <context:component-scan base-package="包名"/>


    常用注解:

    @Repository
    @Service
    @Autowired




    @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
    @Scope注解 作用域
    @Lazy(true) 表示延迟初始化
    @Service用于标注业务层组件(注入dao)
    @Controller用于标注控制层组件(注入服务)
    @Repository用于标注数据访问组件,即DAO组件(实现dao访问)。
    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
    @Scope用于指定scope作用域的(用在类上)
    @PostConstruct用于指定初始化方法(用在方法上)
    @PreDestory用于指定销毁方法(用在方法上)
    @DependsOn:定义Bean初始化及销毁时的顺序
    @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
    @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
    @Autowired @Qualifier("personDaoBean") 存在多个实例配合使用

    @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
    @PostConstruct 初始化注解
    @PreDestroy 摧毁注解 默认 单例  启动就加载
    @Async异步方法调用


  • 相关阅读:
    3. Image Structure and Generation
    STM32F103
    10.2 External interrupt/event controller (EXTI)
    10.1 Nested vectored interrupt controller (NVIC) 嵌套矢量中断控制器
    ibatis 使用 in 查询的几种XML写法
    文字纵向打印
    oracle每天清理归档日志
    使用语句查询mssql死锁
    Xml序列化UTF-8格式错误
    Nginx的优点
  • 原文地址:https://www.cnblogs.com/mlan/p/11060359.html
Copyright © 2011-2022 走看看