第2章 IOC 高级-基于注解和java类的配置(2课时)

基于注解的配置

step 1:修改xml头部描述

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.neuedu"/> 

step2:写dao,service接口和实现类

public interface IPowerDao {
  public void del(int id);
}

@Repository("powerDao")
public class PowerDaoImpl implements IPowerDao {

    @Override
    public void del(int id) {
        System.out.println("del power");

    }
}

public interface IPowerService {
  public void del(int id);
}


@Service("powerServie")
public class PowerServieImpl implements IPowerService {
    @Autowired
    IPowerDao powerDao;
    @Override
    public void del(int id) {
        System.out.println("del service");
        powerDao.del(id);
    }
    public void setPowerDao(IPowerDao powerDao) {
        this.powerDao = powerDao;
    }

}

step 3写测试类

public class ScanTest {
    @Test
public void test1(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        IPowerService service=(IPowerService) ctx.getBean("powerServie");
        service.del(1);
    }
}

@Qualifier

如果一个接口有多个实现类,注入时需要用@Qualifier 明确引用哪个名字的实现类

        @Autowired
    @Qualifier("userDaoImpl")
    public IUserDao userDao;

注意:如果service里既有有参构造(缺少无参构造)又有属性set方法,@Qualifier会提示构造方法异常。
解决方法有二:1)删除有参构造,只保留set方法
2)增加无参构造

java配置方式

工程spring-java
1)file-new -maven project-等-quick start-工程名spring-java-finish
2)建包com.neuedu.module.dao
com.neuedu.module.servie
3)把上个工程建的dao,service拷贝过来
4)新建包com.neuedu.config
5)在com.neuedu.config包下新建ModuleConfig.java

package com.neuedu.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//@Configuration表示该文件为配置文件
//@ComponentScan表示扫描哪些包下的注解
@Configuration
@ComponentScan(basePackages={"com.neuedu.module"})
public class ModuleConfig {
  
}

6)在dao类上加注解@Repository("userDao") 表明我是仓储类

@Repository("userDao")
public class UserDaoImpl implements IUserDao {

    @Override
    public int login(String username, String pwd) {
        System.out.println(username+"登录"+"密码为:"+pwd);
        return 0;
    }
}

7)service类上加注解@Servcie("userService") 表明我是业务类
把userDao自动注入用@Autowired

完整代码:

package com.neuedu.module.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.neuedu.module.dao.IUserDao;
@Service("userService")
public class UserServiceImpl implements IUserService {
    @Autowired
private IUserDao userDao;
    @Override
    public int login(String username, String pwd) {
        return userDao.login(username, pwd);
    }
    public IUserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }
}

8)写测试类

package com.neuedu.spring_java;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.neuedu.config.ModuleConfig;
import com.neuedu.module.service.IUserService;

public class SpringJTest {
   @Test
   public void test1(){
      //加载配置文件 (AnnotationConfigApplicationContext注解配置文件方式)
       ApplicationContext ctx=new AnnotationConfigApplicationContext(ModuleConfig.class);
      //读取bean
       IUserService service=(IUserService) ctx.getBean("userService");
      //调用bean里的方法
       service.login("陈昊", "123456");
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容