zoukankan      html  css  js  c++  java
  • Java web开发(15)Spring入门介绍

    IOC入门案例

     有User类

    public class User {
    public void add() {
            System.out.println("add..........");
        }
    }

    在Spring的配置文件bean1.xml中如下配置

    <bean id="user" class="cn.itcast.ioc.User"></bean>

    如下使用

    ApplicationContext context = 
                    new ClassPathXmlApplicationContext("bean1.xml");
    User user=(User)context.getBean("user");
    System.out.println(user);
    user.add();

    Bean的标签:scope

    <bean id="user" class="cn.itcast.ioc.User" scope="prototype"></bean>

    如果不配置scope默认为singleton

    属性注入

    有参构造注入

    比如类PropertyDemo1,有属性username

    private String username;
    //有参构造函数
    public PropertyDemo1(String username){
    this.username=username;
    }

    通过如下配置为其注入属性

        <bean id="demo" class="cn.itcast.property.PropertyDemo1">
            <constructor-arg name="hello" value="小王小马"></constructor-arg>
        </bean>

    Set方法注入对象类型属性

    有类UserService

    public class UserService {
    
        //1 定义dao类型属性
        private UserDao userDao;
        //2 生成set方法
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        
        public void add() {
            System.out.println("service.........");
            userDao.add();
        }
    }    
        <!-- 1 配置service和dao对象 -->
        <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
        
        <bean id="userService" class="cn.itcast.ioc.UserService">
    
            <property name="userDao" ref="userDao"></property>
        </bean>

    name :UserService中UserDao属性名称

    ref,UserDao类在bean中的id值。

     Autowired介绍

    使用@Autowired注解的过程中,如果出现NoUniqueBeanDefinitionException异常,大多是因为自动装配或者其他方式装配所导致的歧义性.即一个接口存在两个以上的实现类.即在自动装配的时候,可能出现因重名问题导致的NoUniqueBeanDefinitionException异常.

    @Autowired是按类型进行装配的,那么我一个接口UserInterface,有多个实现类

    AImpl(@service(name="userInterface1")),BImpl(@service(name="userInterface2")

    等等这些实现类都加入了Spring容器,当在一个类中使用如下语句:

    @Autowired
    private IUserInterface userInterface;

    在下面列举一下了一下,上述问题以及类似的装配歧义性解决问题方法. 

    方法一

    首先加上注解@Qualifier来区分不同的实例.通过在实现接口的类上通过value属性去命名不同的名称,对于@Repository、@Service 和 @Controller 和 @Component四个注解都有类似value属性可以设置,例如:

    @Service(value="userServiceImpl")
    public class UserServiceImpl implements IUserService{
    
    }
    
    @Autowired
    @Qualifier("userServiceImpl")
    private IUserService userServiceImpl;

    方法二

    因为一个借口存在两个以上的实现类,也可以通过标识首选哪个bean,来解决歧义性问题.例如:

    @Component
    @Primary
    public class UserServiceImpl implements IUserService{
    
      }

    此时,如果引用到了IUserService接口的实现类注入,则首先注入@Promary注解标注的类,但是此时有一个问题,在同一个接口的实现类中,你只能使用一次@Primary,如果对于AImpl和BImpl都使用了@primary,则还是会发生装配的歧义性.此时,建议使用(1)的方式来解决歧义性问题.

    注解开发

    目的:使用注解的方式替代bean配置

    比如,上面的User可以改成如下

    @Component(value="user")
    public class User{
    .....
    }

    说明:这个注解就等效于

    <bean id="user" class="....">

    Component,Service都是一个意思。

    配置:在原来配置bean的文件中使用

    <context:component-scan base-package="cn.itcast"></context:component-scan>

    base-package可以学包名,也可以是开头为cn.itcast的所有包。

    注解方式使用事务

        <!-- 第一步配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 第二步 开启事务注解 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>

    在需要使用事务的方法上面使用@Transactional

     注解方式注入属性

    上面的UserService,不使用配置,使用注解改写成

    @Component(value="id_of_dao")
    public class UserDao {
    
        public void add() {
            System.out.println("dao.........");
        }
    }
    
    @Service(value="userService")
    public class UserService {
    
      //这里可以使用@Autowired @Resource(name
    ="id_of_dao") private UserDao db; public void add() { System.out.println("service..........."); db.add(); } } // 测试代码 @Test public void testService() { ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = (UserService) context.getBean("userService"); userService.add(); } //输出 service........... dao........
  • 相关阅读:
    测试环境
    Android的生命周期
    利用xpath来解析douban电影相对应的信息
    利用U盘大白菜软件来重装win7系统
    忘记mysql数据库root密码
    snmpd.conf 配置
    WebService入门
    java注解XML
    jsonrpc环境搭建和简单实例
    Net-SNMP V3协议 安装配置笔记(CentOS 6.3/5.6)
  • 原文地址:https://www.cnblogs.com/legion/p/9559885.html
Copyright © 2011-2022 走看看