发表于: 2020-06-12 10:51:47

4 1583


今日作为:接口为什么能实例化?

                 只要有类实现了接口,接口就能实例化。。。。(书上竟然从来没讲过)

public class IoC {
@Test
   public void iocTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao userDao= (UserDao) applicationContext.getBean("VVV");
       userDao.login();
   }
}



public class IoC {
@Test
   public void iocTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao userDao= new UserDaoimpl();
       userDao.login();
   }
}

都能跑过。。。。


但是(UserDao)是什么意思?去掉了会报错2333  百度也查不到!!!

请教一下师兄。。。

UserDao userDao= (UserDao) applicationContext.getBean("VVV")



<bean id="VVV" class="com.jnshu.dao.UserDaoImpl"/>
<bean id="vvv" class="com.jnshu.dao.UserServiceImpl">
       <property name="UserDao" ref="VVV"/>
</bean>


UserDaoImpl这个类的Bean id被我设成了VVV


然后UserServiceImpl Bean id被我设成了vvv


把VVV的属性UserDao通过setter方法注入到vvv

package com.jnshu.dao;

public class UserServiceImpl implements UserService{
private UserDao user233;
   public void setUserDao(UserDao user233){
this.user233 = user233;
   }
@Override
   public void login() {
user233.login();
       System.out.println("userService login");
   }
}




那么问题来了????

UserDaoImpl它实现了接口UerDao,但是UserDaoImpl里面并没有一个属性叫UserDao啊!!!!!

public interface UserDao {
public abstract void login();
}

public class UserDaoImpl implements UserDao {
@Override
   public void login() {
System.out.println("UserDao login");
   }
}


请教一下师兄这是怎么回事???


public class UserServiceImpl implements UserService{
UserDao user233;
   public void setUserDao(UserDao user123){
user233 = user123;
   }
@Override
   public void login() {
user233.login();
       System.out.println("userService login");
   }
}

还有就是UserDao在UserServiceImpl里面的对象 user233和在stter方法里面的作为形参的user123他们应该是栈内存不同,但是都是指向同一个堆内存地址吧???


public class UserServiceImpl implements UserService{
private UserDao user233;
   public void setUserDao(UserDao user233){
this.user233 = user233;
   }
@Override
   public void login() {
user233.login();
       System.out.println("userService login");
   }
}

但是我要是改成同名,那他们不是都是一个栈内存么????

还有就是UserDao是个接口,他的对象应该也是接口怎么会实现的是UserDaoImpl里面的方法,难道Spring在幕后做了工作?

通过管理XML配置了UserDaoImpl的Bean,在用接口的时候Spring会自动找实现接口的类中的方法?然后注入?

所以这就是IoC和DI其实描述的是一个类的不同角度的证据?

也请教一下师兄。。。。


下午。。。。帮外派师兄去搬东西去了

下午热的燥的很,搞一会儿就发呆,基本算是摸鱼了

不知道明天能不能开空调,武汉这日子没空调已经要疯了!!!!





返回列表 返回列表
评论

    分享到