Spring基础

目录

1.什么是Spring的IOC

2.新建user实体类

3.resources下新建一个spring配置文件ApplicationContext.xml:

4.获取XML中的Bean

  4.1 通过id和类型获取Bean:

4.2 通过 spring 的 @Autowired 注解自动注入:根据类型注入

5 .Seivice注解

6.@Autowired和@Qualifier使用

7.@Resource 注解


1.什么是Spring的IOC

Spring 是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,
解决了企业应用开发的复杂性,适用范围是一切 Java 应用。

IOC:控制反转,指的是spring以前,对象都是自己new去创建,
现在通过spring的配置文件,由spring容器负责创建,控制权发生了转移,所以叫控制反转。

IOC别名,也叫DI 就是依赖注入,由容器动态的将某种依赖关系注入到组件中。

2.新建user实体类

public class SysUser {
    private Integer id;

    private String username;

    private String telephone;

    ... set get 省略
}

3.resources下新建一个spring配置文件ApplicationContext.xml:

    <bean id="user" class="com.org.pojo.SysUser">
        <property name="id" value="1"></property>
        <property name="username" value="张三"></property>
        <property name="telephone" value="13898987676"></property>
    </bean>

4.获取XML中的Bean

  4.1 通过id和类型获取Bean:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/ApplicationContext.xml"})
public class TestSpring {
    @Test
    public void testGetBeanById(){
        // 通过id获取Bean
        ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        SysUser user = (SysUser) ac.getBean("user");
        System.out.println(user); // SysUser [id=1, username=张三, telephone=13898987676]
    }

    @Test
    public void testGetBeanByType(){
        // 通过类型获取Bean
        ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        SysUser user =  ac.getBean(SysUser.class);
        System.out.println(user); // SysUser [id=1, username=张三, telephone=13898987676]
    }
}

4.2 通过 spring 的 @Autowired 注解自动注入:根据类型注入

    @Autowired
    private SysUser user;
    @Test
    public void testAutowired(){
        System.out.println(user); //SysUser [id=1, username=张三, telephone=13898987676]
    }

5 .Seivice注解

新建UserService接口 和 UserServiceImpl 实现类,并实现该接口

public interface UserService {
    SysUser getUser(int id);
}

@Service("UserServiceImpl")
public class UserServiceImpl implements UserService{

    public SysUser getUser(int id) {
        // 模拟数据库查询,根据id 获取一条数据
        SysUser sysUser = new SysUser();
        sysUser.setId(id);
        sysUser.setTelephone("13899990000");
        sysUser.setUsername("李四");
        return sysUser;
    }
}

进行测试:

@Test
    public void test(){
        // 使用spring之前,New对象
        UserService userService = new UserServiceImpl();
        System.out.println(userService.getUser(1));
    }

在XML中进行配置:

<bean id="userService" class="com.org.service.impl.UserServiceImpl">

测试:

@Test
public void test(){
        // 使用spring的 xml配置
        ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        UserService userService1 = (UserService) ac.getBean("userService");
        System.out.println(userService1.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]

}

Spring除了在XML中进行配置,还可以进行注解配置:

applicationContext.xml 中配置  <context:component-scan base-package="com" />

配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描到文件中带有@Service,@Component,@Repository,@Controller等这些注解的类,则把这些类注册为bean。

<context:component-scan base-package="com"/>

注解测试:

    @Autowired
    private UserService userService;
    @Test
    public void test(){
        // 使用注解
        System.out.println(userService.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]
    }

6.@Autowired和@Qualifier使用

如果有其它实现类也实现了  UserService 接口,@Autowired private UserService userService;  怎么知道注入的是哪个实现类?

新建是一个实现类  NewUserServiceImpl 实现 UserService 接口

@Service("NewUserServiceImpl")
public class NewUserServiceImpl implements UserService {
    public SysUser getUser(int id) {
        // 模拟数据库查询,根据id 获取一条数据
        SysUser sysUser = new SysUser();
        sysUser.setId(id);
        sysUser.setTelephone("13888888888");
        sysUser.setUsername("王五");
        return sysUser;
    }
}

再次运行test方法,控制台报错:

NoUniqueBeanDefinitionException: No qualifying bean of type 'com.org.service.UserService' available: expected single matching bean but found 2:

newUserServiceImpl,userServiceImpl

NoUniqueBeanDefinitionException 异常,就是说 bean 不是唯一的。我们可以使用  @Qualifier 注解 和 @Autowired 保证唯一性。

    @Autowired
    @Qualifier("NewUserServiceImpl")
    private UserService userService;
    @Test
    public void test(){
        // 使用注解
        System.out.println(userService.getUser(1)); // SysUser [id=1, username=王五, telephone=13888888888]
    }

spring 的 @Autowired 是根据类型注入的,byType  通过参数的数据类型自动自动装配

7.@Resource 注解

我们也可以使用 @Resource 注解 实现 @Autowired和  @Qualifier 连用的效果 

@Resource是属于J2EE ,JDK1.6支持的注解byName 通过参数名 自动装配。
    @Resource(name = "UserServiceImpl")
    private UserService userService;
    @Test
    public void test(){
        // 使用注解
        System.out.println(userService.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值