栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring的配置与实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring的配置与实现

目录

Spring配置文件

Spring相关API

ApplicationContext的继承体系

 ApplicationContext的实现类

 getBean()方法使用

Spring配置数据源

Spring原始注解

Spring整合Junit


Spring配置文件
 

配置重点applicationContext.xml

    标签
    id属性:在容器中Bean实例的唯一标识,不允许重复
    class属性:要实例化的Bean的全限定名
    scope属性:Bean的作用范围,常用是Singleton(默认)和prototype

    标签:属性注入
    name属性:属性名称
    value属性:注入的普通属性值
    ref属性:注入的对象引用值


    标签

    标签

    标签

    标签

    标签:导入其他的Spring的分文件

Spring相关API

ApplicationContext的继承体系


applicationContext:

接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象

 ApplicationContext的实现类

1) ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件 推荐使用这种

        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");


2) FileSystemXmlApplicationContext
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

        FileSystemXmlApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("C:\Users\ChenQi\Desktop\Spring\ioc\src\main\resources\applicationContext-product.xml");


3) AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
 

 getBean()方法使用
public Object getBean(String name) throws BeansException {
    assertBeanFactoryActive();
    return getBeanFactory().getBean(name);
}

public  T getBean(Class requiredType) throws BeansException {
    assertBeanFactoryActive();
    return getBeanFactory().getBean(requiredType);
}
 UserService userService =(UserService) classPathXmlApplicationContext.getBean("userService");

UserService bean = classPathXmlApplicationContext.getBean(UserService.class);

getBean有两个实现方法

当参数的数据类型是字符串时,表示根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
当参数的数据类型是Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。

Spring配置数据源


数据源的手动创建,导入c3p0和druid的坐标,导入mysql数据库驱动坐标
 



    c3p0
    c3p0
    0.9.1.2



 
      com.alibaba
      druid
      1.1.6





      mysql
      mysql-connector-java
      5.1.49

 这里需要注意:mysql的版本需要5.1.49 否则报错The last packet successfully received from the server was 927 milliseconds a 连接数据库超时  下面的conn=dataSource.getConnection() =null。

public class JdbcUtils {
    private static DruidDataSource dataSource;
    static{
        try {
            Properties properties=new Properties();
            //读取jdbc.properties配置文件
            InputStream inputStream=JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

            //从流中加载数据
            properties.load(inputStream);
            //创建数据库连接池
            dataSource= (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    
    public static Connection getConnection(){
        Connection conn=null;
        try {
            conn=dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }

    
    public static void close(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

可以将DataSource的创建权交由Spring容器去完成
 DataSource有无参构造方法,而Spring默认就是通过无参构造方法实例化对象的
 DataSource要想使用需要通过set方法设置数据库连接信息,而Spring可以通过set方法进行字符串注入


    
    
    
    

Spring原始注解
注解说明
@Component使用在类上用于实例化Bean
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入
@Resource相当于@Autowired+@Qualifier,按照名称进行注入
@Value注入普通属性
@Scope标注Bean的作用范围
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestroy使用在方法上标注该方法是Bean的销毁方法

        使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean
        需要进行扫描以便识别使用注解配置的类、字段和方法。

    
    
注解说明
@Configuration用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解,标志该类是Spring的核心配置类
@ComponentScan用于指定 Spring 在初始化容器时要扫描的包。
作用和在 Spring 的 xml 配置文件中的
一样
@Bean使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@PropertySource用于加载.properties 文件中的配置
@Import用于导入其他配置类

         分配置

//
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource")  //Spring会将当前方法的返回值以指定名称存储到Spring容器中
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

        总配置

//标志该类是Spring的核心配置类
@Configuration
//
@ComponentScan("com.itheima")
//
@Import({DataSourceConfiguration.class})
public class SpringCofiguration {

}

 测试加载核心配置类创建Spring容器

@Test
public void testAnnoConfiguration() throws Exception {
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
    UserService userService = (UserService)applicationContext.getBean("userService");
    userService.save();
    DataSource dataSource = (DataSource)applicationContext.getBean("dataSource");
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
}

 Spring整合Junit

 在测试类中,每个测试方法都有以下两行代码:

        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        AccountService as = ac.getBean("accountService",IAccountService.class);

这两行代码获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。

        让SpringJunit负责创建Spring容器,但是需要将配置文件的名称告诉它,将需要进行测试Bean直接在测试类中进行注入

① 导入spring集成Junit的坐标



    org.springframework
    spring-test
    5.0.2.RELEASE


    junit
    junit
    4.12
    test


② 使用@Runwith注解替换原来的运行期

@RunWith(SpringJUnit4ClassRunner.class)
public class SpringJunitTest {
}


③ 使用@ContextConfiguration指定配置文件或配置类

@RunWith(SpringJUnit4ClassRunner.class)
//加载spring核心配置文件
//@ContextConfiguration(value = {"classpath:applicationContext.xml"})
//加载spring核心配置类
@ContextConfiguration(classes = {SpringConfiguration.class})
public class SpringJunitTest {
}


④ 使用@Autowired注入需要测试的对象

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class SpringJunitTest {
    @Autowired
    private UserService userService;
}


⑤ 创建测试方法进行测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class SpringJunitTest {
    @Autowired
    private UserService userService;

    @Test
    public void testUserService(){
    userService.save();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号