【Spring】--IoC容器装配Bean_基于注解配置方式--实例化Bean以及通过注解给属性赋值的几种方式

一、 项目介绍

1、IoC容器装配Bean_基于注解配置方式–实例化Bean以及通过注解给属性赋值的几种方式
2、项目开发工具:

   (1) jdk1.8.0_92
   (2) IDEA-2019.3.4
   (3) apache-maven-3.5.2

3、项目目录结构

在这里插入图片描述

二、源码

1、pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.sougu</groupId>
  <artifactId>spring_day2</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
<!--单元测试-->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--    日志依赖-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
<!--    spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.16.RELEASE</version>
    </dependency>
    <!--      inject注解依赖-->
    <dependency>
      <groupId>javax.inject</groupId>
      <artifactId>javax.inject</artifactId>
      <version>1</version>
    </dependency>
  </dependencies>
</project>

2、resources中的配置文件

   (1) log4j.properties(日志相关配置信息)

log4j.rootLogger=DEBUG,A1
log4j.logger.org.mybatis=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

   (2) applicationContext.xml(Spring实体bean配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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 http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--    开启注解功能-->
 <!--   <context:annotation-config />  这个可以不写,在配置包扫描的时候,spring会自动开启注解功能,所以,注解开启功能可以不配置,只写下面一句代码即可。-->
<!--   配置注解扫描,作用会自动扫描某包或子包下面含有@Component的类,并作为bean来管理-
 -->
    <context:component-scan base-package="com.sou"/>
</beans>
3、service层

    UserService.java

package com.sou.service;

public interface UserService {
    public void login();
}


4、service实现层

   UserServiceImpl.java

package com.sou.service.impl;

import com.sou.mapper.UserMapper;
import com.sou.service.UserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import org.springframework.context.annotation.Scope;

@Service("userService")
//设置bean为多例,但是不能调用销毁方法,多例没有销毁方法。默认为singleton单例
@Scope("prototype")
public class UserServiceImpl implements UserService {
    //简单类型数据依赖注入
    @Value("Rose")
    private String name;
    //   复杂类型数据依赖注入
//    第一种:使用@Value 结合SpEL #{}  ---- spring3.0 后用
    // @Value("#{userMapper}")
//   第二种: 使用@Autowired 结合 @Qualifier
    /* 2.1单独使用@Autowired 按照类型注入
     *  @Autowired
     */
    /*
     * 2.2使用@Autowired+@Qualifier 按照名字注入
     *
     * @Autowired
     *@Qualifier("userMapper")
     */
   /* 第三种
    @Resource(name = "userMapper")*/
    /*
     * 第四种: JSR-330标准(jdk) 提供 @Inject (麻烦点)不推荐(了解)
     * 需要先导入 javax.inject 的 jar (废掉了)
     * */
    @Inject
    UserMapper userMapper;

    @Override
    public void login() {
        System.out.println("名字叫:" + name);
        userMapper.login();
    }
    @PostConstruct
     public void init(){
        System.out.println("UserServiceImpl的初始化方法");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("UserServiceImpl的销毁方法");
    }
}

5、dao(Mapper)层(此中只写了简单输出语句,没与数据库交互)

   UserMapper.java

package com.sou.mapper;

public interface UserMapper {
    public void login();
}
6、dao(Mapper)实现层

   UserMapperImpl.java

package com.sou.mapper.impl;

import com.sou.mapper.UserMapper;
import org.springframework.stereotype.Repository;

@Repository("userMapper")
public class UserMapperImpl implements UserMapper {
    @Override
    public void login() {
        System.out.println("userMapper登录成功!");
    }
}


7、UserTest文件

   UserTest.java

import com.sou.service.UserService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {
    public ApplicationContext ac;
    @Before
    public void init(){
        // 使用spring容器创建的对象
        // 1.指定spring配置文件的名称
        String config = "applicationContext.xml";
        //2.创建表示Spring容器的对象,ApplicationContext
        // ApplicationContext就是表示Spring容器,通过容器获取对象了
        // ClassPathXmlApplicationContext :表示从类路径中加载Spring的配置文件
        //注意:后期这种方式不会再使用,会使用更加简单的方式
        ac = new ClassPathXmlApplicationContext(config);;
    }
    @Test
    public void test1(){
        UserService service = (UserService) ac.getBean("userService");
        service.login();
    }
}

源码,以及导入项目到自己的idea中,可以地下评论留下QQ号,看到后会及时回复,也可以加群交流,谢谢

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值