Spring是怎么根据接口获取实现类的?

动态代理 不是要知道实现类和接口才能创建出代理对象吗?
引用Autowired注解注入service时都是写的接口,spring是怎么找到接口的实现类的?
是扫包时记录了依赖关系还是什么别的方法?

2个回答

在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。
另外关于Autowied的原理还有很多,我说的也就是它的大概原理,详细的你可以去谷歌哈。

qq_34872748
L星火燎原 提前扫包的时候记录了类和接口的实现关系
大约一年之前 回复
hailowell
纵马饮白虹 是提前扫包的时候记录了类和接口的实现关系还是用到时再找?
大约一年之前 回复
hailowell
纵马饮白虹 自动查找需要的bean 能说下这一步的思路吗?spring是怎么根据接口自动找到相应的实现类的?
大约一年之前 回复

扫包一般写到接口那层包,因为实现类的包是再接口包里,扫描机制是扫描当前包以及下面的所有子包

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring DI @Autowired标记在接口上面获取该接口实现类的问题
Spring的DI ,@Autowired标记在一个接口上面 ,会通过寻找@Component注解找到该接口的实现类,但是 假如该接口有多个实现类呢 ,该寻找哪一个实现类呢?
new的对象中获取spring中的bean类报applicationContext为null
我是使用实现ApplicationContextAware接口封装一个工具类来初始化一个applicationContext来使用的,项目启动是也看到初始化成功了,applicationContext是有值的,但在new的对象中使用时却报null?不知道为什么,请大神指点,下面是代码实现: ```@Component public class BeanContext implements ApplicationContextAware { private static ApplicationContext applicationContext; public static ApplicationContext getApplicationContext(){ return applicationContext; } @SuppressWarnings("unchecked") public static <T> T getBean(String name) throws BeansException { return (T)applicationContext.getBean(name); } public static <T> T getBean(Class<T> clz) throws BeansException { return applicationContext.getBean(clz); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { BeanContext.applicationContext = applicationContext; } } ``` public class SyncDataTask extends AbstractTask { private SyncDataParameters syncDataParameters; private Job job; private DataSource dataSource; private BaseDataSource baseDataSource; /** * task dir */ private String taskDir; private ShellCommandExecutor shellCommandExecutor; /** * process database access */ private ProcessDao processDao; private DataxJsonUtil dataxUtil = BeanContext.getBean(DataxJsonUtil.class); } ``` beanContext类上是有component注解的,syncDataTask是普通的类,没有交给spring管理,DataxJsonUtil是spring管理的类
spring mvc整合mybatis 为什么不把mapper接口类直接注入Controller呢
# spring mvc整合mybatis 为什么不把mapper接口类直接注入Controller呢? 正常开发如下: 1、mapper.xml,mapper接口类,service接口,serviceImpl实现类,Controller控制类 2、serviceImpl实现类注入mapper接口类,在Controller控制类中注入service接口 ## 问题1、为什么不直接把mapper接口类注入到Controller控制类中应用呢? ## 问题2:或者设计一个公用执行方法类,该类实现applicationContextAware接口,然后直接在spring容器中获取已经实例化的mapper接口,通过反射原理执行该接口的某个指定方法。最后在controller类中的方法里直接调用该类执行由前端传进来的方法名 请问各位大神这两种情况有什么影响呢?
Spring中通过ApplicationContextAware的实现类获得的ApplicationContext是线程安全的吗?
项目中我需要根据登陆用户动态修改Spring的数据源配置,即通过实现ApplicationContextAware接口来获取ApplicationContext,并将用户对应的数据源bean覆盖这个ApplicationContext的数据源bean。在多线程的情况下,是否会发生同步问题?Spring是否做到了每个线程持有独立的一份ApplicationContext,或者说我通过实现ApplicationContextAware而获得的ApplicationContext是否经过了ThreadLocal的封装优化?
SpringBoot项目中加入spring session后每次请求接口获取到的sessionId都不一致是什么请款
我在项目中按照这个方法: https://www.cnblogs.com/yanggb/p/10886520.html 加入spring session想实现session的共享,但是我现在不跨域访问,每次请求接口的时候获取到的sessionId都不一致是什么原因导致的呢? 后来我把下面这两段代码注释掉请求获取到的sessionId就一样了 ``` package com.test.common.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600) public class SessionConfig { @Value("${redis.hostname:localhost}") private String hostName; @Value("${redis.port:6379}") private int port; // @Value("${redis.password}") // private String password; @Bean public JedisConnectionFactory jedisConnectionFactory(){ RedisStandaloneConfiguration redisStandaloneConfiguration=new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(hostName); redisStandaloneConfiguration.setPort(port); // redisStandaloneConfiguration.setPassword(password); redisStandaloneConfiguration.setDatabase(0); return new JedisConnectionFactory(redisStandaloneConfiguration); } @Bean public StringRedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ return new StringRedisTemplate(redisConnectionFactory); } } ``` ``` package com.test.user.config; import com.test.common.config.SessionConfig; import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; public class RedisSessionInitializer extends AbstractHttpSessionApplicationInitializer { public RedisSessionInitializer(){ super(SessionConfig.class); } } ``` 问题出在哪里啊~ 下面是我后台打印的日志: ![图片说明](https://img-ask.csdn.net/upload/201911/08/1573199256_608561.png)
spring+mybatis发布webservice接口问题
用spring+mybatis写的一个web项目,bean的管理是通过spring自动注入实现,在项目中可以实现对持久层dao的操作,并且@Transactional事物管理有效,但是将接口发布成webservice接口(用eclipse自带jax-ws实现),接口发布成功,但是在调用方法的候webservice获取不到spring注入的bean。 换一种方式(方式2),将接口中需要的bean,通过ApplicationContext getbean()获取bean实例,然后在发布webservice接口,能够实现对持久层dao的操作,但是事物失效这个问题有什么解决方案。 问题一:webservice怎么能实现spring注入的bean不为空。 问题二:用getBean的方式(方式2)发布的webservice怎么解决事物失效问题。
关于spring security3中密码获取的问题
我在配置spring security3中,有一个非常困惑的问题。 在登录页面,基于 /j_spring_security_check 的登录后,继承UserDetailsService接口,并且实现函数loadByUserName(String username)。 我要问的是,我如何取得密码?传递进来的只是一个帐户,没有密码。 还是我对登录这块理解错误?望指教。
Spring集成mybaties,用配置文件将映射器接口注入业务层,无法代理生成实现类
Spring集成mybaties,用配置文件将映射器接口注入业务层,做单元测试时,控制层可以正常返回数据,但是部署到tomcat上,启动就报错,信息如下。 1. 单元测试时正常返回数据 ![图片说明](https://img-ask.csdn.net/upload/201711/25/1511544455_147942.png) 2.部署到tomcat 启动报错 严重: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.alibaba.druid.pool.DruidDataSource] for bean with name 'dataSource' defined in file [G:\IdeaProjects\firstSpring\target\firstSpring\WEB-INF\classes\spring-mybatis.xml]; nested exception is java.lang.ClassNotFoundException: com.alibaba.druid.pool.DruidDataSource Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.alibaba.druid.pool.DruidDataSource] for bean with name 'dataSource' defined in file [G:\IdeaProjects\firstSpring\target\firstSpring\WEB-INF\classes\spring-mybatis.xml]; nested exception is java.lang.ClassNotFoundException: com.alibaba.druid.pool.DruidDataSource Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.mybatis.spring.SqlSessionFactoryBean] for bean with name 'sqlSessionFactory' defined in file [G:\IdeaProjects\firstSpring\target\firstSpring\WEB-INF\classes\spring-mybatis.xml]; nested exception is java.lang.ClassNotFoundException: org.mybatis.spring.SqlSessionFactoryBean Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.mybatis.spring.mapper.MapperScannerConfigurer] for bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in file [G:\IdeaProjects\firstSpring\target\firstSpring\WEB-INF\classes\spring-mybatis.xml]; nested exception is java.lang.ClassNotFoundException: org.mybatis.spring.mapper.MapperScannerConfigurer Caused by: java.lang.ClassNotFoundException: org.mybatis.spring.mapper.MapperScannerConfigurer at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:401) at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1432) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1377) ... 81 more 3. 配置文件 spring-mvc ![图片说明](https://img-ask.csdn.net/upload/201711/25/1511544595_915527.png) Spring-mybatis ``` <util:properties id="cfg" location="classpath:config.properties"/> <!--配置DruidDataSource连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init" lazy-init="true"> <property name="driverClassName" value="#{cfg.driver}" /> <property name="url" value="#{cfg.url}" /> <property name="username" value="#{cfg.username}" /> <property name="password" value="#{cfg.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="#{cfg.initialSize}" /> <!-- 连接池最大数量 --> <property name="maxActive" value="#{cfg.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="#{cfg.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="#{cfg.maxWait}" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" > <list> <value>classpath:mapper/*.xml</value> </list> </property> </bean> <!-- Mapper接口所在包,Spring会自动查找其下的Mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> <property name="basePackage" value="rush.dao"/> </bean> ``` 4. 另外,在将映射器注入到业务层时,提示: ![图片说明](https://img-ask.csdn.net/upload/201711/25/1511544722_931225.png) 困惑,求大神帮忙解答,谢谢!
想把Spring的AOP应用到项目中去,主要想记录用户的一些行为,有些疑问想请教一下,谢谢!
1、项目中很多类都是用NEW的方式实例化的,这样的有没有办法把SPRING用起来? 比如经常是这样用的: ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml"); MessageSender sender = (MessageSender)context.getBean("messageSender"); 上面是通过SPRING来获取实例的,有没有办法用NEW生成的也可以用AOP 2、很多类和很多方法都没有用接口的方法,想基于XML Schema的设置,采用这种方式Advice将不用实现特定的接口?
spring纯注解配置使用jdbcTemplate,无法获取spring容器中的bean
![这里是我dataSource的配置](https://img-ask.csdn.net/upload/201706/26/1498463533_601184.png) ![这是实现HomeDao接口的一个类](https://img-ask.csdn.net/upload/201706/26/1498463251_920085.png) ![这是出现的错误,我发现dataSrource和jdbcTemplate全部都是null,但是确实执行了DataSource配置的代码类。](https://img-ask.csdn.net/upload/201706/26/1498463294_32354.png)
请为我点拨Spring容器扩展点
在看Spring的容器扩展点一章,有点不明白了。 [color=blue]1.Spring框架的Ioc容器被设计为可扩展的。通常我们不需要子类化各个BeanFactory或ApplicationContext实现类。[/color] 这里的子类话什么意思?难道是继承他?然后扩展? [color=blue]2.一般都是通过plugin各种集成接口实现来进行扩展。[/color] 这个“插件”的集成来扩展,能举例说下具体应用在哪里吗? [color=blue]3.用BeanPostProcessor定制bean?[/color] 这个什么意思?我们获取Spring配置文件中的“元数据”(Spring里术语叫元数据,其实就是我们配置的类对象)都是通过ApplicationContext去获取就好了。WEB应用中配置web.xml就OK了,还用这个去定制bean做什么?这里的定制是什么含义?
struts2+spring整合后Action实现SessionAware后获取不到Session
<p>以下是Action实现的方法,下面只是贴出了Action的实现,代码测试过没问题,但只要运行到设置Session的地方就通不过,但也不报错,通过检测发现设置session时通过IOC方式注入的map形式的session未获取到,也就是getSession得到的是null,所以程序执行不了,看看哪位能看出下面程序问题的指点一下,我找了两天了,对照struts2中的示例也没发现哪里有问题,在此先谢谢了!</p> <p>public class ManagerAction extends ActionSupport implements SessionAware{ <br>IGxManagerService gxManagerService=null; <br><br> private String username = null; <br><br>private String password = null; <br><br>private Map session; <br><br>public void setSession(Map value) {//实现SessionAware中的setSession方法,通过IOC方式注入Session <br>session = value; <br>} <br><br><span style="color: #0000ff;">public Map getSession() { //获取map形式的session集合<br>return session; <br>}</span> <br><br>         public String getUsername() { <br>return username; <br>} <br><br>public void setUsername(String username) { <br>this.username = username; <br>} <br><br>public String getPassword() { <br>return password; <br>} <br><br>public void setPassword(String password) { <br>this.password = password; <br>} <br>public GxManager getManagerSessionInfo() { <br>return (GxManager) getSession().get(WebConstants.WEB_MANAGER_KEY); <br>} <br><br>/** <br>* &lt;p&gt; <br>* Store new reference to GxManager Object. <br>* &lt;/p&gt; <br>* <br>* @param GxManager <br>*            GxManager object for authenticated GxManager <br>*/ <br>public void setManagerSessionInfo(GxManager gxManger) { <br>getSession().put(WebConstants.WEB_MANAGER_KEY, gxManger); <br>} <br>public IGxManagerService getGxManagerService() { <br>return gxManagerService; <br>} <br><br>public void setGxManagerService(IGxManagerService gxManagerService) { <br>this.gxManagerService = gxManagerService; <br>} <br><br>public String login() { <br>GxManager gxManager = null; <br>try { <br>gxManager = gxManagerService.checkLogin(getUsername(),getPassword()); <br>} catch (Exception e) { <br>// TODO Auto-generated catch block <br>e.printStackTrace(); <br>} <br>if (gxManager != null) { <br><span style="color: #ff0000;">setManagerSessionInfo(gxManager);</span><span style="color: #ff0000;"> //此处出现问题,检测的结果是调用上面蓝色的getSession时获取到的值为NULL</span><br>} <br>if (hasErrors()) { <br>                      return INPUT; <br>                   } <br>return SUCCESS; <br>} <br><br>}</p> <p> </p><br /><strong>问题补充:</strong><br />配置文件都应该是没问题的,因为只要我把setManagerSessionInfo(gxManager)这一句注释掉程序就可以正常执行的<br /><strong>问题补充:</strong><br />下面这个是spring的配置文件 <br />&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt; <br /> &lt;property name="driverClassName" value="com.mysql.jdbc.Driver"&gt; <br /> &lt;/property&gt; <br /> &lt;property name="url" value="jdbc:mysql://localhost:3306/test"&gt;&lt;/property&gt; <br /> &lt;property name="username" value="root"&gt;&lt;/property&gt; <br /> &lt;property name="password" value="root"&gt;&lt;/property&gt; <br /> &lt;/bean&gt; <br /> <br /> &lt;bean id="sessionFactory" <br /> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; <br /> &lt;property name="dataSource"&gt; <br /> &lt;ref bean="dataSource" /&gt; <br /> &lt;/property&gt; <br /> &lt;property name="hibernateProperties"&gt; <br /> &lt;props&gt; <br /> &lt;prop key="hibernate.dialect"&gt; <br /> org.hibernate.dialect.MySQLDialect <br /> &lt;/prop&gt; <br /> &lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt; <br /> &lt;/props&gt; <br /> &lt;/property&gt; <br /> &lt;property name="mappingResources"&gt; <br /> &lt;list&gt; <br /> &lt;value&gt;com/gx/entity/member/GxUserinfo.hbm.xml&lt;/value&gt; <br /> &lt;value&gt;com/gx/entity/GxManager.hbm.xml&lt;/value&gt;&lt;/list&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="myTransactionManager" <br /> class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; <br /> &lt;property name="sessionFactory"&gt; <br /> &lt;ref local="sessionFactory" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> <br /> &lt;bean id="transationInterceptor" <br /> class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; <br /> &lt;property name="transactionManager" ref="myTransactionManager" /&gt; <br /> &lt;property name="transactionAttributes"&gt; <br /> &lt;props&gt; <br /> &lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="delete*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="Save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="merge*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="shield*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;/props&gt; <br /> &lt;/property&gt; <br /> <br /> &lt;/bean&gt; <br /> <br /> &lt;bean <br /> class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt; <br /> &lt;property name="beanNames"&gt; <br /> &lt;value&gt;*DAO,*Service,*Services&lt;/value&gt; <br /> &lt;/property&gt; <br /> &lt;property name="interceptorNames"&gt; <br /> &lt;list&gt; <br /> &lt;value&gt;transationInterceptor&lt;/value&gt; <br /> &lt;/list&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br />&nbsp;&nbsp;&nbsp; <br /> &lt;bean id="GxManagerDAO" class="com.gx.dao.imp.GxManagerDAO"&gt; <br /> &lt;property name="sessionFactory"&gt; <br /> &lt;ref bean="sessionFactory" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="GxManagerService" class="com.gx.service.imp.GxManagerService"&gt; <br /> &nbsp;&nbsp;&nbsp; &lt;property name="gxManagerDAO"&gt; <br /> &lt;ref bean="GxManagerDAO" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="ManagerAction" class="com.gx.web.action.ManagerAction"&gt; <br /> &nbsp;&nbsp;&nbsp; &lt;property name="gxManagerService"&gt; <br /> &lt;ref bean="GxManagerService" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;/beans&gt;<br /><strong>问题补充:</strong><br />public class ManagerAction extends ActionSupport implements SessionAware <br />方法中已经实现了SessionAware接口,session应该是由struts2中的IOC方式自动注入的,应该不需要通过spring进行注入才是的!<br /><strong>问题补充:</strong><br />那应该怎么注入呢,因为如果只单独使用struts2上面的方式是可以获取到session的,因为上面是struts2中所说的通过实现sessionAware以IOC的方式获取struts2中封闭的map形式的底层session集合,上面之所以得不到,应该是由于struts2整合了spring的原因,但具体在spring中如何注入就不知道怎么做了!
Spring的 @Component("xxx")和@Qualifier(“xxx”)的区别
当一个接口有多个实现类时,就无法使用@AutoWired放在此接口上面了,需要对某个实现类创建唯一的标识符,就是在对应实现类上面添加Qualifier(“xxx”)然后同样在@AutoWired下添加Qualifier(“xxx”)就能对应起来,获取到那个对应的实现类的bean了,可是@Component("xxx")不就是为实现类bean创建唯一标识符的么(也就是id),为什么要多此一举,还要在实现类上添加Qualifier(“xxx”)呢? 直接写成@Component("xxx")可以吗?
spring cloud config刷新client配置问题
如题: 我们都知道,spring cloud config消息总线分服务端(简称server)和客户端(简称client),如果我们要对client的一些配置信息做修改时,只需要在git上修改对应client的配置文件,然后使用Post方式调用server的/bus/refresh?destinace=clientName:clientPort即可达到热更新的效果,但是我在使用过程中发现,并非client的所有配置都可以使用这样的方式进行热更新,所以,到底可以更新client的哪些配置我目前还是迷糊中的。 我现在有一个demo,server的配置文件或者我配置的是git,client的环境有两个版本,一个是开发版,即dev,还有一个是测试版本,即test,这两个版本中,其中有一个配置不一样,那就是数据库的连接,开发版本有开发数据库,测试版本有测试数据库,所以我希望使用spring cloud config server来进行client的数据库配置更新,client项目中只一个bootstrap.yml文件,里面只配置了eureka,zipkin,config的相关信息,这部分是不会变的,client的数据库配置和其他配置是放在git上的,当我在git上修改了client的数据库配置,比如url,然后调用server的/bus/refresh接口,观察到client确实是刷新了spring.datasource.url信息,项目本身没有报错,但是当我通过client的接口获取数据库名的时候,发现获取到的还是refresh之前的数据库名,并非我在git上配置的数据库,配置jdbcTemplate是直接使用springboot默认的配置,没有手动申明druidDataSource和jdbcTemplate(经过测试就算手动配置也是一样的结果),我已经在dao层加入了@RefreshScope注解 请问各路大神,这个问题如何解决呢? 另外还有一个问题,我想把logback的配置文件也放到git上,然后通过server来refresh client的logback日志配置信息,这个又应该如何实现?
cxf3跟spring4整合,address怎么配成自动设置?
我现在生成的webService都需要在spring配置脚本里面添加服务,例如 <!-- jax-ws endpoint定义 --> <jaxws:endpoint id="userWebServiceEP" address="/UserService"> <jaxws:implementor ref="userWebService" /> </jaxws:endpoint> <!-- WebService的实现Bean定义 --> 现在就是想这些代码不需要配置。主要是这个address="/UserService" ,想改成自动的,就是在impl的服务类上面有个path ,然后通过spring扫描自动获取 如果有几千个服务 ,那这样配置是不可行的 ,有没有类似2.0版本的Jsr181HandlerMapping这样的代理配置。 只需要在服务接口上注解声明为@WebService即可 ,然后使用基本包扫描,只要有这样的注解就能访问 谢谢
Spring factoryBean加载 框架内部嵌套加载问题
各位大神,最近在研究spring框架bean加载过程,遇到一个棘手问题,我相信研究spring原理的大神肯定对这个问题有兴趣 我的项目框架是spring+rpc,配置文件方式注入bean,非注解 一部分bean是普通的serivce bean配置,spring内部走正常bean的加载过程,没有问题; 还有一部分是自定义标签,通过一个工厂类生成service的代理对象bean,作为消费者/生产者,这个工厂类实现了FactoryBean接口,spring内部走FactoryBean的加载过程 public class RemoteServiceFactory implements FactoryBean<Object>, BeanFactoryAware, InitializingBean { private static final Logger log = LoggerFactory.getLogger(RemoteServiceFactory.class);  public RemoteServiceFactory(Object bean, String path, int port) {   this.object = bean; // 自定义标签中配置的service bean的引用(ref属性,引用配置文件bean id)   this.path = path; // 生产者服务路径(和此问题无关)   this.port = port; // 生产者服务端口(和此问题无关)  }    public boolean isSingleton() {   return true;  }  public void afterPropertiesSet() throws Exception {    // 根据this.object创建相应的生产者/消费者代理对象,用于rpc  } } 问题分析,debug spring bean解析后的加载过程 1.spring对配置文件解析后,遍历所有的bean,进行一一实例化   AbstractApplicationContext:finishBeanFactoryInitialization()     内部调用beanFactory.preInstantiateSingletons();       DefaultListableBeanFactory:preInstantiateSingletons()         内部遍历beanNames,进行一一实例化 2.假如第一个bean是普通的service bean,在初始化时,会解析内部的依赖,然后遍历依赖参数,解析依赖   DefaultListableBeanFactory:doResolveDependency()     内部调用findAutowireCandidates()        内部调用BeanFactoryUtils.beanNamesForTypeIncludingAncestors()         内部调用lbf.getBeanNamesForType()           -> DefaultListableBeanFactory:doGetBeanNamesForType()   关键就在这里,doGetBeanNamesForType方法内部会遍历所有bean,去判断是否匹配上面的依赖参数的类型,   当遍历到实现FactoryBean的bean时,会实例化这个bean(因为FactoryBean只是代理,不是真正bean),然后又会解析factoryBean中真实bean中的依赖参数,   然后就又会走到这里,导致一直嵌套下去的加载过程   如果程序加载没有问题,则一切正常;一旦某个类加载失败(比如某个类注入的属性在properties中不存在),就会出现大量的异常信息抛出,   原因就是上面的嵌套加载,某个类加载抛出异常会一直抛出到嵌套的最顶层,每一层的异常信息都会积攒下来,最后爆发似的抛出   (每层的异常信息都是 当前这层bean的加载失败) 各位大神:   我一直感觉spring这样嵌套加载在设计上是不应该的,不理解为什么会这样,单纯匹配类型的话,不能通过其他方式获取FactoryBean中真实bean的类型吗?     为什么非要实例化它呢?有什么方法可以解决这个问题?
急求解决Spring security中认证后的UserDetailsService接口问题!
问题描述: 登录页面除开j_username和j_password,还有siteId参数,我如何才能在UserDetailsService的实现类里方法loadUserByUsername中获取到提交上来的siteId这个参数。
spring注入失败
最近想把以前的项目增加的service托给spring处理 [code="java"] <bean id="userBusiness" class="com.*.service.impl.UserBusinessImpl"> <property name="userDAL" ref="userDao"></property> </bean> <bean id="userDao" class="com.*.dao.impl.UserDALImpl"> </bean> [/code] UserDALImpl是原先先好的DAO层的类,有自己的查询数据库的一些实现.我现在只想把userDao注入到service层里面处理 [code="java"] UserBusinessImpl private UserDAL userDAL; public void setUserDAL(UserDAL userDAL) { this.userDAL = userDAL; } [/code] 感觉就是简单的注入,还是失败. spring不熟,各位指点下. [b]问题补充:[/b] *号是我项目的 名称,我没写出来,其实是有路径的 UserDALImpl是实现UserDAL 接口 [b]问题补充:[/b] 没有报错信息. 只是在执行 [code="java"] UserBusinessImpl.java private UserDAL userDAL; public void setUserDAL(UserDAL userDAL) { this.userDAL = userDAL; } public Person getUserFromEXTNO(String extNo) throws Exception { return userDAL.getUserFromEXTNO(extNo); } [/code] [code="java"] public class UserDALImpl extends BaseDAL implements UserDAL { // 初始化Log private Logger logger = Logger.getLogger(UserDALImpl.class); public UserDALImpl() throws Exception { } public Person getUserFromEXTNO(String extNo) throws Exception { 执行SQL } [/code] spring配置文件就这2个 [code="java"] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="userBusiness" class="com.ccsee.happytrip.service.impl.UserBusinessImpl"> <property name="userDAL" ref="userDao"></property> </bean> <bean id="userDao" class="com.ccsee.happytrip.dao.impl.UserDALImpl"> </bean> </beans> [/code] 报的异常是在执行getUserFromEXTNO方法时候抛空指针,也就是注入失败,没把dao注入到service层中 [b]问题补充:[/b] [code="java"] UserDALImpl对象看看调用时是不是new的呢?? 如果是那就肯定错了 UserDALImpl 也得用spring注入 或者用applicationConexst.getbean取[/code] UserDALImpl对象我是打算把他注入到UserBusinessImpl中去的,在UserBusinessImpl中是用set接口进去的 至于UserDALImpl本身有自己的JDBC连接池以及一系列的操作. [b]问题补充:[/b] [code="java"] 不对吧 你是已经从bean工程里取出来了 然后执行dao的方法时候报的错么? 如果取出来了 就证明你配置没错 。。。。。你把堆栈信息贴过来 我看看是在哪掉用的时候出的空指针 [/code] 配置文件的写法应该是对的,服务器启动正常, 但是没有注入成功.在执行到UserBusinessImpl的时候抛空指针, [2009-12-04 17:08:18,125]-ERROR (UserLoginAction.java:93)| java.lang.NullPointerException at com.ccsee.happytrip.service.impl.UserBusinessImpl.getUserFromEXTNO(Us erBusinessImpl.java:67) [b]问题补充:[/b] [code="java"] UserBusinessImpl 如果不是通过spring get的 后面的照样无法注入成功 听我的试一下 我过去带的人就有这么错的 估计你的问题也是这个[/code] 没有明白你所说的spring get的 按我的理解就是,在action层,也使用同样的set注入.如果是这样的话,我有尝试过,但是是失败的,也是空指针,只不是报在action层了,也就是注入失败. [b]问题补充:[/b] [quote] 的确是没有获得到dao 你获得UserBusinessImpl 的方式应该不对吧 你是如何获得UserBusinessImpl 的? 那句代码贴出来看看 [/quote] UserBusiness business = new UserBusinessImpl(); 我是直接new的,我也尝试过像service层那样注入,一样没效果 [code="java"] 看你配置看不出有什么问题,有可能是DAO方法里某行报错了。 [/code] 应该还没到dao层,dao层的LOG都没打出来,应该就属于注入失败. [b]问题补充:[/b] [quote] 你new ClassPathXmlApplicationContext()的这个过程就是对配置文件的解析 以及按着你所配置的方式通过反射机制自动给你进行装配 如果没有这个过程 你直接new那就相当于在堆内存上开辟一个空的对象 里面没有任何的东西 所以你取出的dao是空 因为你没往里放东西啊,而UserBusinessImpl userBusinessImpl = (UserManager)factory.getBean("UserBusinessImpl ");是从已经放着解析并且装配好的所有对象的大容器里去取 所以你取出来的是装配好的啊 [/quote] 我把UserBusinessImpl改了下就可以了, [code="java"] public Person getUserFromEXTNO(String extNo) throws Exception { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDAL userDal = (UserDAL)factory.getBean("userDao"); return userDal.getUserFromEXTNO(extNo); } [/code] 但是为什么使用set注入不行 [b]问题补充:[/b] 非常谢谢各位的解答 现在的结果是,我在action,service层使用getBean都可以获取到实例,但是使用set注入都是失败的. [code="java"] <bean name="/userLoginAction" class="com.ccsee.happytrip.web.action.UserLoginAction"> <property name="userBusiness" ref="userBusiness"></property> </bean> <bean id="userBusiness" class="com.ccsee.happytrip.service.impl.UserBusinessImpl"> <property name="userDAL" ref="userDao"></property> </bean> <bean id="userDao" class="com.ccsee.happytrip.dao.impl.UserDALImpl"> </bean> [/code] action层 [code="java"] private UserBusiness userBusiness; public void setUserBusiness(UserBusiness userBusiness) { this.userBusiness = userBusiness; } Person user = userBusiness.getUserFromEXTNO(form.getUserName() .trim()); [/code] 如果使用getBean就行,有朋友说必须都使用spring拖管就行了,我现在 action和service的都放在spring托管中,dao没办法托管必须用原来的. 我想问下原因,谢谢. [b]问题补充:[/b] 我的struts有加载spring strust-config.xml [code="java"] <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /> </plug-in> [/code]
【请教】关于spring框架中JDBC事务管理的一个问题
我有一个接口类及其实现类。 他们的功能是实现“组信息”及“其与组员的关联关系”的存储。 代码示意如下: [code="java"] public class GroupServiceImpl implements GroupService { /** * 单例模式 */ private static GroupService instance = new GroupServiceImpl(); /** * 私有化的构造函数 */ private GroupServiceImpl() { } /** * 获取GroupServiceImpl的一个实例 */ public static GroupService getInstance() { return instance; } /** * 保存组信息(包括组与组员的关联关系) */ public void saveGroup(Group group) { …… // 保存组信息 dao.saveGroup(group); // 保存关联关系 (group中有成员变量List保存管理关系) dao.saveAssociate(group); …… } } [/code] 为了保证事务一致,在配置文件中做了如下配置: [code="java"] <aop:advisor pointcut="execution(* com.ych516.test..*Service.*(..))" advice-ref="txAdvice" /> [/code] 在执行时,spring会报错,告诉我缺少有效的构造函数。 但是为了保持单例模式的原因,我不能把构造函数改为public型的。 请问,这个问题如何解决? 最好不是采用编程式的事务管理,因为不想代码与框架耦合太紧。 最好仍然是声明的方式,多谢各位~:)
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问