spring注解注入的对象为空

本人想测试一下spring注解的用法,但是刚开始就遇到了问题。就是注入的对象为null.

 

首先,加入了spring的jars。如下:

1、common-annotations.jar

2、commons-dbcp.jar

3、commons-io.jar

4、commons-logging.jar

5、commons-pool.jar

6、spring.jar

 

然后,在web.xml中加入了配置信息。如下:

<!-- 配置文件位置 -->

<context-param>
    <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
 </context-param>
 
 <!-- spring的监听器 -->
 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 

然后,写了两个测试类。如下:

package demo;

 

public class Users {

 private String name;
 private int age;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }
}

--------------------------------

package demo;

import javax.annotation.Resource;

 

public class Info {

 private Users user;

 

 public Users getUser() {
  return user;
 }

 

 @Resource(name="users")
 public void setUser(Users user) {
  this.user = user;
 }
}

 

然后,在applicationContext.xml中配置bean。如下:

     <context:annotation-config/>
    
     <bean id="users" class="demo.Users"></bean>

 

然后,在index.jsp中输入Info.User。如下:

<%
  Info info = new Info();
 %>
 <%=info.getUser() %>

 

然后,输入的结果为 null.

 

请问高手,这是什么原因?谢谢

4个回答

楼上都在搞笑吧? 8)

Info info = new Info(); 这行不对

zys890523
zys890523 表述真没问题? 也许我理解你的不到位。这里个人觉得应该表述成,不应该new出来,通过自动装配(且不说JSP里面怎么自动装配)或者通过BeanFactory中获取吧
7 年多之前 回复
iteye_7589
iteye_7589 跟我说的一回事啊。我说的有啥搞笑了?
7 年多之前 回复
dreamwangqing
dreamwangqing 谢谢你。后来我发现不应该new对象的。应该去获取bean对象。
7 年多之前 回复

要么让spring自动发现类,
要么在xml里用bean声明类。
否则,不会自动读取类,不读取类就不会读取annotation。
info类也要成为spring context中一个bean才行。

因为没有给类注入值啊,
在applicationContext.xml中配置bean
context:annotation-config/



张三


20


就是要给Users类里定义的属性注入值

piggerman
piggerman 敢问这位,你用过spring不 他的info是new的,看清楚,info也托管才可以!!
7 年多之前 回复

2楼说的有道理

NumberBB
NumberBB dwangel
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于Spring 注解注入对象问题
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p>问题描述如下:</p> <p>A 类是一个WS入口,调用B类的业务。 然后在B类里面注入service ,注入的service为空。</p> <p>public class A{</p> <p>   private B b = new B();</p> <p>   public void test(){</p> <p>       b.method();</p> <p>}</p> <p>}</p> <p> </p> <p>public class B{</p> <p>    @Resource<br>     private IEsbForEmpBusinessService esbForEmpBusinessService;</p> <p> </p> <p>    在这个类里面的方法,调用esbForEmpBusinessService层的方法为空注入不进去。</p> <p>}</p> <p> </p> <p style="text-align: left;">@Service("esbForEmpBusinessServicesImpl")<br>public class EsbForEmpBusinessServicesImpl implements IEsbForEmpBusinessService {<br>     @Resource<br>     private IEsbForEmpBusinessDao esbBusinessDao ;<br> <br> <br>   @Override<br>   public EsbToHrEmpInfo queryHrEmpInfo(String  emp_num) throws ServiceException {<br>    EsbToHrEmpInfo ethe = esbBusinessDao.queryHrEmpInfo(emp_num);<br>    return ethe ;</p> <p style="text-align: left;">   }</p> <p style="text-align: left;"> @Override<br> public void creatHrEmpInfo(EsbToHrEmpInfo hrempInfo) throws ServiceException {<br>  esbBusinessDao.creatHrEmpInfo(hrempInfo);</p> <p style="text-align: left;"> }</p> <p style="text-align: left;"> @Override<br> public void updateHrEmpInfo(EsbToHrEmpInfo hrempInfo,String emp_num) throws ServiceException {<br>  esbBusinessDao.updateHrEmpInfo(hrempInfo,emp_num);</p> <p style="text-align: left;"> }</p> <p style="text-align: left;"> @Override<br> public List&lt;String&gt; queryAreaCodeByNetCode(String netCode)<br>   throws ServiceException {<br>  return esbBusinessDao.queryAreaCodeByNetCode(netCode);<br> }</p> <p>}</p> <p> </p> <p> </p> <p>问题: class B 里面的service对象注入不进来为null ,求解!!!!</p> </div>
spring mvc注入问题 实例化对象为空
项目中需要用到定时任务,更新数据库数据,定时任务现在可以正常使用,但是在调用业务逻辑的方法时,无法实例化对象,目前访问该批量更新数据库方法只能通过URL的方法访问,SpringMVC如何在任意类中实例化controller或者接口service的,注解方法使用了始终返回的是null,大神讲一下吧
如何用属性注入的方式为spring的service注入Mybatis的Mapper对象?
万能的网友的。帮帮我吧。 spring+Mybatis+struts2整合中遇到一个问题:service层中不知道如何注入Mapper对象啊。 首先我分三层。action---> service---->Mapper(充当dao层)。 我的Mapper是扫描包生成实现类的。然而我的service里面有一个Mapper对象。 就像这样: public class ProductService { //@Autowired private ProductMapper productMapper; public void setProductMapper(ProductMapper productMapper) { this.productMapper = productMapper; } //省略其他代码。。。 } 然后我想通过setter方法将productMapper注入到ProductService中。 我的配置文件如下: <bean id="Mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer" > <property name="basePackage" value="wm.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <bean id="productService" class="wm.service.ProductService" scope="prototype" > <property name="productMapper" ref=""></property> </bean> 写到这里,我忽然愣住了。这是我不知道ref该怎么写。或者还是value怎么写。如果用注解注入的话,我能解决这个问题。但是如果我用属性注入的方式怎么实现呢?大神们,没有分。不好意思啊。
Spring框架中的Autowired注解,默认真的是按照ByType方式实现自动注入的吗?
在学习spring IOC的过程中,接触到@Autowired注解,资料上都是说默认是按照Bytype类型实现自动注入,但我的实际操作却发现是:先使用ByName,如果失败,再使用ByType。贴代码,求指点: Student类: ``` @Component public class Student { @Value("12") int age; @Value("lisa") String name; @Autowired School school; public Student(){} public Student(int age, String name, School school) { this.age = age; this.name = name; this.school = school; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + ", school=" + school + '}'; } } ``` School类: ``` public class School { String name; String address; public School() { } public School(String name, String address) { this.name = name; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } ``` xml文件 ``` <?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:context="http://www.springframework.org/schema/context" 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"> <!--配置注解扫描器,base-package表示注解所在的包,目的是告诉spring框架去扫描指定包的注解--> <context:component-scan base-package="com.aipande.bao1"/> <bean id="school" class="com.aipande.bao1.School"> <property name="name" value="武汉大学21"/> </bean> <bean id="school03" class="com.aipande.bao1.School"> <property name="name" value="武汉大学21"/> </bean> <bean id="school02" class="com.aipande.bao1.School"> <property name="name" value="武汉大学"/> </bean> </beans> ``` 测试类: ``` public class AppTest01 { public static void main(String[] args) { /* * 创建spring容器对象 * spring框架在加载xml文件并创建spring容器对象的同时, * 就会将xml文件中配置的bean对象(作用域为singleton)一同创建,并将这些对象放置在spring容器中。 * */ String config = "applicationContext.xml"; ApplicationContext ctx = new ClassPathXmlApplicationContext(config); //使用getBean()方法获取bean对象 Student stu = (Student) ctx.getBean("student"); System.out.println(stu); } } ``` 结果输出: ``` Student{age=12, name='lisa', school=School{name='武汉大学21', address='null'}} ``` 问题: 如果按照Bytype方式获取bean对象,那上面就应该报错啊,因为sprig容器中存在多个同源bean对象,但是没有报错,说明是按照byName的方式注入。后来我将xml文件中id为school的bean对象删除,就出现了错误提示,说明此时是按照byType的方式注入。因此我有上面的疑问,求解
spring 注入 和 new 的对象,的问题。。。
我需要new一个子线程对象,子线程对象里有注入的数据库底层对象, 需要调用他的方法。但是不行了。注解都失效。但是我必须的new线程对象的。 有没有其他办法?
关于使用spring注解的问题
先贴代码: import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.cn.su.dao.PaymentMapper; import com.cn.su.entity.Payment; import com.cn.su.service.PaymentService; import com.cn.su.vo.PaymentVo; @Service public class PaymentServiceImpl implements PaymentService{ @Autowired private PaymentMapper paymentMapper; @Autowired private PaymentVo paymentVo; @Override public List<PaymentVo> selectAllPayment(Payment payment) { List<Payment> payList = paymentMapper.selectAllPayment(payment); List<PaymentVo> paymentVoList = new ArrayList<PaymentVo>(); for(int i=0;i<payList.size();i++){ double sumPayment = calculateSum(payList.get(i)); //PaymentVo paymentVo = new PaymentVo(); paymentVo.setPayment(payList.get(i)); paymentVo.setSumPay(sumPayment); paymentVoList.add(paymentVo); } return paymentVoList; } ``` ``` 这里有两个问题,第一个是spring使用代理IOC模式,取消了new一个对象的做法,我们使用注解后通常@Autowire注入,对象可以直接使用,这段代码中有用到list集合, List<PaymentVo> paymentVoList = new ArrayList<PaymentVo>();,这里我用到new,那么集合如果要使用注解的方法,应该怎么写呢?第二个问题,这里注入的实体类 PaymentVo,它是Payment的封装类,但是代码用到循环封装参数,因为用到的PaymentVo这个对象是同一个,而不是new新建一个对象,所以导致最后一条数据覆盖前面数据的现象,导致最后的List<PaymentVo>里面的数据是重复的数据,编码然来是1,2,3的对象,最后全部变成编码为3的对象,请问这个问题改怎么解决,难道还是要像以前一样new一个新的对象,取消这个使用注解的方式吗?
spring是如何保证注入的bean和方法调用得来的对象是一致的呢?求解
``` @Bean public Object o1() { System.out.println("o1"); return new Object(); } @Bean public Object o2(Object o1) { System.out.println(new Object() == new Object()); System.out.println("注入的对象和直接调用的一样吗?" + (o1 == o1())); return new Object(); } ``` 在springboot下的输出: o1 false 注入的方法和调用的一样吗?true 我的想法:初始化o1, 初始化o2注入o1, 在o2内部调用o1得到一个新的object, 比较得false 还是自己想到了,最后只有一种方法可以拦截上面的o1调用,那就是代理 下面是用@Configuration 注解的 BeanTest的代理类 class spring.BeanTest$$EnhancerBySpringCGLIB$$310664fb
关于cglib动态代理的对象无法获取其属性注解的问题
``` @Service public class MarketMoneyChangeService{ @DynamicReference private IMarketBuyerProvider marketBuyerProvider; @Transactional(rollbackFor = Exception.class) public Boolean doChangeMoney() { return true; } } ``` 注解声明如下: ``` import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 服务动态注入注解 */ @Inherited @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface DynamicReference { } ``` 代码中@DynamicReference为自定义注解, 作用是根据项目配置, 在运行时注入指定SpringBean或者Dubbo引用对象。正常情况下使用没问题, 但是当加上事务注解@Transactional时, MarketMoneyChangeService会变成cglib代理对象, 则使用Field无法获取到注解@DynamicReference ``` DynamicReference dynamicRefrence = filed.getAnnotation(DynamicReference.class); ``` 求解大佬, 被cglib代理的对象如何获取属性的注解, 或者cglib代理的对象如何设置其属性值
spring 注解方面的疑惑
小弟最近刚刚接触ssh2整合 ,有2个问题没弄明白,希望各位高手 指教一下,小弟不胜感激 下面把我的代码先贴出来 [color=red]user.java[/color] public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } [color=red]user.hbm.xml[/color] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="cn.com.jyp.model"> <class name="User" table="j_user"> <id name="id"> <generator class="native" /> </id> <property name="name" /> </class> </hibernate-mapping> [color=red]UserDao[/color] public interface UserDao { /** * 添加 */ public void save(User user); [color=red]UserDaoImpl[/color] @Repository("userDao") public class UserDaoImpl extends HibernateDaoSupport implements UserDao { @Resource(name = "hibernateTemplate") public void setHibernateTemplate1(HibernateTemplate hibernateTemplate) { super.setHibernateTemplate(hibernateTemplate); } /* * 添加 */ public void save(User user) { getHibernateTemplate().save(user); } [color=red]UserService[/color] public interface UserService { /** * 注册用户 */ public void save(User user); [color=red]UserServiceImpl[/color] @Service("userService") @Transactional public class UserServiceImpl implements UserService { @Resource private UserDao userDao; /* * 注册用户 */ public void save(User user) { if (user != null && user instanceof Object) userDao.save(user); } [color=red]struts.xml[/color] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.objectFactory" value="spring" /> <package name="User" extends="struts-default"> <action name="userAdd" class="userAddAction"> <result name="success" >/success.jsp</result> <result name="input">/userAdd.jsp</result> </action> </package> </struts> [color=red]applicationContext.xml[/color] <?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:context="http://www.springframework.org/schema/context" 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.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- spring自动扫描和管理bean --> <context:component-scan base-package="cn.com.jyp"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ssh2" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!-- 配置SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>cn/com/jyp/model/User.hbm.xml</value> </list> </property> </bean> <!-- 配置hibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 配置spring提供的事务管理器 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 采用@Transactional注解方式使用事务 --> <tx:annotation-driven transaction-manager="txManager"/> </beans> 我的疑问是,第一个:在使用Spring提供的注解方式@Resource 注入依赖对象,标注在属性上,是不是可以不用提供这个属性的setter方法,如果可以不提供的话,为什么UserDaoImpl 里 这么写 @Resource private HibernateTemplate hibernateTemplate; 确出错,这个注解的实现原理是不是根据相应的属性自动提供其setter方法为其注入的啊 ? 第二个:关于事务的注解是按照上面的代码这么标在service上吧? 第三个:就是请各位帮我看看我的代码不足之处 谢谢了!
Spring 注入为空
在一个SSH的项目中遇到一个问题,我有一个dao的接口BaseJdbcDao,和一个dao的实现类BaseJdbcDaoImpl,实现类已经通过注解提交给容器进行管理,然后有一个工具类MailHelper想通过自动装配载入dao的实现类,可是每次都没有装配成功,代码如下,请教各位: [code="java"] package base; import java.util.List; import java.util.Map; import org.springframework.jdbc.support.rowset.SqlRowSet; public interface BaseJdbcDao { public abstract List queryForList(String sql); public abstract int queryForInt(String sql); public abstract SqlRowSet queryForRowSet(String sql); public abstract int update(String sql); public abstract Map queryForMap(String sql); public abstract void delete(String sql); public abstract void insert(String sql); } [/code] [code="java"] package base.impl; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; import base.BaseJdbcDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository("basejdbcdao") public class BaseJdbcDaoImpl implements BaseJdbcDao { private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } @Autowired public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List queryForList(String sql){ System.out.println(sql); return this.getJdbcTemplate().queryForList(sql); } public int queryForInt(String sql){ System.out.println(sql); return this.getJdbcTemplate().queryForInt(sql); } public SqlRowSet queryForRowSet(String sql){ System.out.println(sql); return this.getJdbcTemplate().queryForRowSet(sql); } public int update(String sql){ System.out.println(sql); return this.getJdbcTemplate().update(sql); } public Map queryForMap(String sql){ System.out.println(sql); return this.getJdbcTemplate().queryForMap(sql); } public void delete(String sql){ System.out.println(sql); this.getJdbcTemplate().update(sql); } public void insert(String sql){ System.out.println(sql); this.getJdbcTemplate().execute(sql); } } [/code] [code="java"]package util; import java.io.IOException; import java.util.HashMap; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.support.rowset.SqlRowSet; import java.util.Date; import javax.activation.DataHandler; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import util.ByteArrayDataSource; import javax.mail.PasswordAuthentication; import base.BaseJdbcDao; import base.impl.BaseJdbcDaoImpl; public class MailHelper { @Autowired @Qualifier("basejdbcdao") private BaseJdbcDao dao; private String email; private String mobile; private String school; private String name; private String remark; private String appstr; public MailHelper(String school,String name,String mobile,String email,String remark,String appstr){ this.email = email; this.mobile = mobile; this.school = school; this.name = name; this.remark = remark; this.appstr = appstr; } public MailHelper(){}; public void sendMail(){ this.insertData(school,name,mobile,email,remark,appstr); } /** * 帐号申请的功能 * @param template * @param pschool * @param pname * @param pmobile * @param pemail * @param premark */ public void insertData(String pschool,String pname,String pmobile,String pemail,String premark,String appstr){ String email = changeContent( pemail); String mobile = changeContent( pmobile); String school =changeContent (pschool); String name =changeContent (pname); String remark = changeContent (premark); String to = "test@163.com"; String subject = "申请"; StringBuilder sb = new StringBuilder("insert into maillist(linkman,school,mobile,mail,remark)values('"+name+"','"+school+"','"+mobile+"','"+email+"','"+remark+"')"); dao.update(sb.toString()); remark = "内容略。。"; this.send( to, subject, remark); } /** * Sending a mail with given values.<br> * content parameter means the main email text,it refers to a html file. * * @param smtpServer * @param to * @param from * @param subject * @param content * @param emailUsername * @param emailUserpass * @author WYQ */ private String send(String to,String subject,String content) { try { HashMap<String,String> map = readParamters(); String smtpserver = map.get("smtpserver"); String publicaccount = map.get("publicaccount"); String publicpwd = map.get("publicpwd"); String from = map.get("publicmail"); Properties props = System.getProperties(); props.put("mail.smtp.port", "25"); props.put("mail.smtp.starttls.enable","false"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", smtpserver); Session session = null; session = Session.getDefaultInstance(props,new PasswordAuthenticator(publicaccount,publicpwd)); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse( to, false)); msg.setSubject(subject); msg.setDataHandler(new DataHandler(new ByteArrayDataSource(content,"text/html; charset=\"utf-8\""))); msg.setHeader("X-Mailer", "XML-Mail"); msg.setSentDate(new Date()); // -- Send the message -- Transport.send(msg); return "success"; } catch (Exception ex) { return "Error" + ex; } } private HashMap<String,String> readParamters(){ HashMap<String,String> map = new HashMap<String,String>(); Properties properties =new Properties(); try { properties.load(MailHelper.class.getClassLoader().getResourceAsStream("mail.properties")); map.put("smtpserver", properties.getProperty("smtpserver")); map.put("publicmail", properties.getProperty("publicmail")); map.put("publicaccount", properties.getProperty("publicaccount")); map.put("publicpwd", properties.getProperty("publicpwd")); } catch (IOException e) { e.printStackTrace(); } return map; } } class PasswordAuthenticator extends Authenticator { private String username; private String password; public PasswordAuthenticator(String username, String password) { this.username = username; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication (username, password); } } [/code] 然后我在struts的action类中调用MailHelper的send方法进行邮件发送时,打印的dao总是为空,action的代码是: [code="java"] /** * 帐号申请-邮件发送 * @return */ public String sendMail(){ MailHelper mh = new MailHelper(); mh.sendMail(); success = true; return SUCCESS; } [/code] spring的自动扫描和注解配置已经开启,也已经把dao的package路径和MailHelper的package路径加入到基类中了, [code="java"] <context:component-scan base-package="action,service,dao,base,util,tools"/> [/code] 现在就是弄不明白,为什么通过new出来的MailHelper对象中注入的dao总是为空呢。
spring aop annotion 方式 如何注入 request?
在spring mvc aop 注解 的方式 下如何 注入 request ,response 对象呢?
使用spring+Mybatis 注解无效
使用spring+Mybatis,使用spring注解,一直报空指针异常,各位麻烦看看 这个spring文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 使用注解式注入 --> <context:annotation-config /> <context:component-scan base-package="com/springMyBatis/system/service/*"/> <context:component-scan base-package="com/springMyBatis/system/dao/*"/> <!-- 配置数据源--> <import resource="application-db.xml" /> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource"> <ref bean="jdbcDataSource" /> </property> <!-- MyBatis 的 XML 配置文件路径 --> <property name="configLocation" value="classpath:com/springMyBatis/Mybatis.xml" /> <!-- 扫描自动生成的xml文件 --><!-- Mybatis XML映射文件 --> <property name="mapperLocations"> <list><!-- Mybatis XML映射文件 --> <value>classpath*:com/springMyBatis/system/mapper/*.xml</value> </list> </property> </bean> <!-- 扫描mybatisGenerator 自动生成的 所有接口--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com/springMyBatis/system/dao"></property> </bean> <!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="jdbcDataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="annotationClass" value="org.springframework.stereotype.Repository"/> <property name="basePackage" value="com.springMyBatis.system"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> </beans> Mybatis配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 全局映射器启用缓存 --> <setting name="cacheEnabled" value="false" /> <!-- 查询时,关闭关联对象即时加载以提高性能 --> <setting name="lazyLoadingEnabled" value="false" /> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 --> <setting name="aggressiveLazyLoading" value="false" /> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 允许使用列标签代替列名 --> <setting name="useColumnLabel" value="true" /> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> <!-- <setting name="useGeneratedKeys" value="true" /> --> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <!-- <setting name="autoMappingBehavior" value="FULL" /> --> <!-- 对于批量更新操作缓存SQL以提高性能 --> <setting name="defaultExecutorType" value="BATCH" /> <!-- 数据库超过25000秒仍未响应则超时 --> <!-- <setting name="defaultStatementTimeout" value="25000" /> --> </settings> </configuration> DAO层接口 package com.springMyBatis.system.dao; import java.util.List; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.springMyBatis.system.model.User; @Repository @Transactional public interface UserDao { public List<User> selectAllUser(); } mapper.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.springMyBatis.system.dao.UserDao"> <select id="selectAllUser" resultType="com.springMyBatis.system.model.User"> select * from user </select> </mapper> service层文件 package com.springMyBatis.system.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.springMyBatis.system.dao.UserDao; import com.springMyBatis.system.model.User; @Service public class Select { @Autowired private UserDao userdao; public List<User> selectAllUser(){ System.out.println(userdao); List<User> list=userdao.selectAllUser(); return list; } userdao一直为空,求大神指导下
junit单元测试使用注解 @ContextConfiguration引入配置文件导致出现Autowire注入的对象类型不匹配,
![图片说明](https://img-ask.csdn.net/upload/201911/11/1573480881_649513.png)![图片说明](https://img-ask.csdn.net/upload/201911/11/1573480902_250891.png)![图片说明](https://img-ask.csdn.net/upload/201911/11/1573480918_735047.png) 大佬们,方便的话帮我看看bug
Spring是怎么根据接口获取实现类的?
动态代理 不是要知道实现类和接口才能创建出代理对象吗? 引用Autowired注解注入service时都是写的接口,spring是怎么找到接口的实现类的? 是扫包时记录了依赖关系还是什么别的方法?
springboot注入线程独立的bean
springboot像使用@autoWired注入httpServletrequest 这样的线程独立bean,每个线程都是自己的request 比如注入当前登录的用户对象,然后直接在Controller用注解获取这个用户.
spring AOP 织入没有加入注解的类方法
本人在做一个关于日志的功能,使用到spring aop。 但问题是作为切点的那个方法所在的类是一个抽象类,并且实现的子类并不是通过spring容器来注入的 我试了下其他有打注释标签的类,前置通知和后置通知都是可以执行的,证明我写的语法并没有错误,所以我判断是类的加载问题。 那有什么办法能够把相关的通知加上的吗? 贴上相关代码: 相关切面 @Aspect @Component("serviceMethodLogInterceptor") public class ServiceMethodLogInterceptor { @Autowired private SQLService sqlService; /** * 服务方法切入点 */ @Pointcut(value = "(execution(* com.snxun.hczz..*.*(..))) && (execution(@com.rop.annotation.ServiceMethod * *(..))) && (!execution(* com.snxun.hczz.log..*.*(..)))") public void serviceMethodPointcut() {} /** * 解析方法切入点 */ @Pointcut(value = "(execution(* com.snxun.hczz..SQLContext.*(..)))") public void analyseMethodPointcut() {} ..... } 要切入的对象 public abstract class SQLContext<T extends SQLParam> implements SQLAnalyses<T> { .... }
实体类中的属性是自己定义的类,使用Mybatis的注解形式时怎么与数据库交互?
描述:现在有两个类,一个是Blog类,一个是BlogType类,在Blog类中有一个BlogType的对象。现在对Blog这个表进行数据库操作,但是这个对象对应Blog表里是存的BlogType的id。也就是需要存入BlogType.id。或者换个说法,就是从数据库里查询Blog表的所有字段,这时BlogType对象不能被自动赋值,因为表里存的是id不是对象。 这种情况使用配置文件的形式,可以定义一个ResultMap实现注入。但是现在使用的是注解形式,不去写配置文件。请问应该使用什么注解来完成这个功能?
@Mock和@Resource 注入冲突?
测试类 ``` public class Test{ @Resource(name = "testFacade") @InjectMocks private testFacade facade; @Mock private TestInf inf; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void test(){ //设置inf预期的行为 when(inf.xxx).thenReturn(xxx); //调用facade开始测试 } } ``` facade的实现 ``` public class testFacadeImpl{ @Resource(name="inf") private TestInf inf; } ``` inf 的实现 ``` @Service("inf") public class TestInfImpl{ public void doSoming(){ xxx; } } ``` 大体就是这样的了,全部采用注解的形式,spring+mockito+junit 测试类里将inf对象mock后注入到facade中,然后在测试方法中执行facade的方法。 但是现在问题是facade的inf属性没有被@Mock标签注入,而是调用了@Resource标签,用的是spring生成的bean 而不是mock的inf, 想问一下是不是@Mock注入后被facade类中的@Resource标签重新注入覆盖掉了?
@autowire在非jersey服务类中不注入(spring+jersey_mybatis)
使用@autowired可以在jersey的服务类中注入,但是在其它类中就无法注入,显示@autowired的对象为空。 spring.xml如下: ``` <?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" 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-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- 自动将包前缀为cc.rinoux.server.*的包中以@Service@Component@Controller标注的类注册为bean 在jersey中,ResourceConfig的实现类将服务所在的包注册(***packages("cc.rinoux.server.service");***) 相当于为包中类添加了@Component注解 --> <context:component-scan base-package="cc.rinoux.server.*" /> <context:component-scan base-package="cc.rinoux.server.mina.handler" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 本地数据库配置 --> 略 </bean> <!-- sqlSessionFactoryBean相当于sqlSrssionFactoryBuilder,在mybatis-spring用法中, 无需直接使用bean或sqlsessionFactory,session工厂将会被注入到MapperFactoryBean或 其它扩展了sqlSessionSupport的DAO --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis.xml"></property> <!-- 将mapper包中所有文件和XXXmapper.xml文件对应起来 --> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean> <!-- dao 自动扫描mapper中的DAO,并注册为bean--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cc.rinoux.server.mapper" /> </bean> <!-- --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 注解方式配置事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans> ```
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python 简易微信实现(注册登录+数据库存储+聊天+GUI+文件传输)
socket+tkinter详解+简易微信实现 历经多天的努力,查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表(...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问